angular2的編譯模式之AOT和JIT


原文

  https://www.jianshu.com/p/c959d90e91ce

大綱

  1、angular應用為什么需要編譯
  2、angular的編譯模式類型
  3、JIT(Just-In-Time)
  4、AOT(Ahead-Of-Time)
  5、JIT vs AOT
  6、Angular2引導方式:基於JIT的動態引導和基於AOT的靜態引導。

1、angular應用為什么需要編譯

  Angular應用中包含的組件、HTML模板(比如:@Directive、@Component、@NgModule、@Pipe)很多都是JS VM無法解析的,所以在瀏覽器渲染應用之前,組件和模板必須要被Angular編譯器轉換為可以執行的JavaScript。

2、angular的編譯模式類型

  在 Angular 2 中有兩種編譯模式:
    JIT - Just-In-Time - 即時編譯
    AOT - Ahead-Of-Time - 預先編譯

3、JIT(Just-In-Time)

   Just-in-Time 編譯模式開發流程

  1、使用 TypeScript 開發 Angular 應用
  2、運行 tsc 編譯 TypeScript 代碼
  3、使用 Webpack 或 Gulp 等其他工具構建項目,如代碼壓縮、合並等
  4、部署應用

   應用部署后,當用戶通過瀏覽器訪問我們應用的時候,她將經歷以下步驟(非嚴格 CSP):

  1、下載應用相關的資源,如 JavaScript 文件、圖片、樣式資源
  2、Angular 啟動
  3、Angular 進入 JiT 編譯模式,開始編譯我們應用中的指令或組件,生成相應的 JavaScript 代碼
  4、應用完成渲染

4、AOT(Ahead-Of-Time)

    Ahead-Of-Time 編譯模式開發流程

  1、使用 TypeScript 開發 Angular 應用
  2、運行 ngc 編譯應用程序
    2.1、使用 Angular Compiler 編譯模板,一般輸出 TypeScript 代碼
    2.2、運行 tsc 編譯 TypeScript 代碼
  3、使用 Webpack 或 Gulp 等其他工具構建項目,如代碼壓縮、合並等
  4、部署應用

    應用部署后,相比於 JIT 編譯模式,在 AOT 模式下用戶訪問我們的應用,只需經歷以下步驟:

  1、下載應用相關的資源,如 JavaScript 文件、圖片、樣式資源
  2、Angular 啟動  3、應用完成渲染

5、JIT vs AOT

  

AOT優勢

  1、渲染得更快
  2、需要的異步請求更少
  3、需要下載的Angular框架體積更小
  4、提早檢測模板錯誤
  5、更安全

JIT優勢

  編譯時間短,除非確實有動態組件的需求,否則jit唯一的優勢就是能用來做在線 Demo和開發調試。

 6、Angular2引導方式:基於JIT的動態引導和基於AOT的靜態引導。

  在Angular2,我們會在main.ts里通過引導AppModule來啟動應用。針對瀏覽器,可以選擇基於JIT編譯器的動態引導和基於AOT編譯器的靜態引導這兩種方式

    基於JIT(Just in Time)編譯器的動態引導

  在這種方式下,angular會在瀏覽器端動態編譯,然后啟動app。

/*  
  引導使用方式:
*/
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';

platformBrowserDynamic().bootstrapModule(AppModule);

   基於AOT(Ahead of Time)編譯器的靜態引導

  相對於動態引導,靜態引導會預先在build階段就生成一些工廠類,其中對應AppModule的工廠類為NgAppModuleFactory。
  使用靜態引導有幾個優點:
    1、因為是預先編譯好,不需要向瀏覽器傳輸Angular的編譯器,所以傳輸的內容更小。
    2、和動態引導需要在瀏覽器端即時編譯不同,靜態引導從服務端下載完代碼后可即時啟動,啟動比較快。對於移動設備和一些低延時網絡里,這兩個有點顯得很重要。

/*
  在main.ts使用AOT模式
*/
import { platformBrowser } from '@angular/platform-browser';
import { AppModuleNgFactory } from './app.module.ngfactory';

platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);

參考網址

aot和jit的區別:
https://segmentfault.com/a/1190000008739157
https://www.jianshu.com/p/ef895e705d58
Angular2引導方式:基於JIT的動態引導和基於AOT的靜態引導
http://blog.csdn.net/chelen_jak/article/details/54912204
AOT的Angular Compiler:
https://zhuanlan.zhihu.com/p/24579527
https://yq.aliyun.com/articles/67203

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM