翻譯|行業資訊|編輯:周思宇|2023-05-11 15:39:41.387|閱讀 123 次
概述:Angular Ivy是Angular的下一代編譯和渲染工具,它帶來了速度和大小方面的改進。在本文中,我們將看到Angular Ivy為Angular項目帶來的改進。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Kendo UI致力于新的開發,來滿足不斷變化的需求,通過React框架的Kendo UI JavaScript封裝來支持React Javascript框架。
Kendo UI for Angular是專用于Angular開發的專業級Angular組件,telerik致力于提供純粹的高性能Angular UI組件,無需任何jQuery依賴關系。
Telerik_KendoUI產品技術交流群:726377843 歡迎一起進群討論
Angular Ivy是Angular的下一代編譯和渲染工具,它帶來了速度和大小方面的改進。Ivy是Angular下一代編譯和渲染的代號。它提高了構建代碼的速度和大小等。Ivy從Angular框架的第9版就開始使用了。
在本文中,我們將看到Angular Ivy為Angular項目帶來的改進。
Angular Ivy編譯的應用比上一代Angular編譯器要小。
與 Angular 8 編譯器相比,小型應用程序要小 30%。與 Angular 8 相比,大型應用程序要小 25-40%。
使用Ivy運行測試速度更快,因為所有測試都可以在第一次編譯之后運行。
在Ivy之前,每次運行測試時,都必須事先編譯項目。編譯過程大大延遲了Ivy之前的測試時間。
在Ivy中,ng可使用全局變量。
它使我們只需要通過在瀏覽器開發控制臺中輸入變量的屬性來訪問Angular組件的各個部分。我們不再需要插入不必要的console.log調用或斷點來調試Angular應用。
ng僅在開發模式下可用。因此,外部人員不能使用生產版本訪問ng。
例如,我們輸入:
const el = document.querySelector("app-root");
進入瀏覽器控制臺,獲取Angular組件的元素。
然后輸入:
ng.getComponent(el);
獲取el元素對應的Angular組件實例。
我們還可以輸入:
ng.getDirectives(el);
獲取添加到組件中的指令,el元素將從中呈現。
我們可以運行:
ng.applyChanges(el);
在el從中呈現的組件上運行變更檢測。
ng從Angular的第一個版本開始就已經可用了。但是,使用Ivy,我們可以直接獲得變量的值。
其他ng方法包括:
列出的所有方法都以一個DOM元素作為參數。
明確的優先順序決定了樣式規則如何應用于Ivy編譯器。
例如,[樣式。Color]顏色樣式覆蓋在其他地方設置的顏色樣式。
以前的編譯器版本使用樣式應用程序的計時來確定最新的樣式,并且沒有應用樣式的一致規則。這可能會導致問題,因為不同的時間可以應用不同的樣式。
延遲加載意味著只加載屏幕上顯示的內容,并且在顯示元素之前完成。
這提高了渲染性能,因為只加載應用程序中顯示給用戶的部分,而不是加載整個應用程序,這可能會非常大。
AOT編譯代表提前編譯。Ivy編譯器默認為AOT,因為它現在比以前版本中使用的即時編譯器更快。
在Ivy之前,組件模板幾乎沒有類型檢查。
使用Ivy,在構建時檢查組件數據類型,以查看模板中的組件數據類型是否與聲明的數據類型匹配。
fullTemplateTypeCheck控制模板是否啟用了數據類型檢查。這在默認情況下是正確的。
例如,如果我們將一個數字賦值給模板中的boolean變量,我們將從Ivy編譯器獲得一個錯誤。
舉一個示例:
app.component.ts
import { Component } from "@angular/core"; @Component({ selector: "app-root", templateUrl: "./app.component.html", styleUrls: ["./app.component.css"], }) export class AppComponent { title: string = "angular-test"; }
寫入:
app.component.html
<button (click)="title = 123">click me</button>
我們會得到一個類型錯誤,因為title應該是字符串。
使用Ivy,重新構建過程變得更加高效,因為它只查看已更改的公共api并重新構建它們。在艾薇之前,任何改變都會引發重建。
組件、指令、模塊等內部細節的改變不會影響構建。
全球化特性也在Ivy中得到了改進。Ivy允許我們在運行時加載全球化特性,而不必在編譯時注冊它們。此外,多種語言可以內置到同一個應用程序包中,而不必將它們分開。
要在應用中添加本地化特性,我們需要添加@angular/ localalize包。
運行:
ng add @angular/localize
按照說明添加包及其依賴項。將添加依賴項所需的導入。
然后我們寫:
main.ts
import { enableProdMode } from "@angular/core"; import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"; import { AppModule } from "./app/app.module"; import { environment } from "./environments/environment"; import { loadTranslations } from "@angular/localize"; import "@angular/localize/init"; if (environment.production) { enableProdMode(); } platformBrowserDynamic() .bootstrapModule(AppModule) .catch((err) => console.error(err)); loadTranslations({ Welcome: "Welcome to {$appName}.", });
用帶有翻譯的對象調用loadTranslations來加載翻譯。
然后使用$ localalize標簽:
app.component.ts
import { Component } from "@angular/core"; @Component({ selector: "app-root", templateUrl: "./app.component.html", styleUrls: ["./app.component.css"], }) export class AppComponent { title: string = "test"; welcome: string = $localize`Welcome to ${this.title}.`; }
在Welcome to ${this.title}上調用$ localalize字符串在app.component.html中,寫入:
{{welcome}}
顯示信息
loadTranslations在運行時用Ivy編譯時加載翻譯,因此減少了初始加載期間需要加載的數據量。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn