ng build --aot 與 ng build --prod


   angluar的編譯有以下幾種方式:

   ng build  常規的壓縮操作    代碼體積最大

 ng build --aot   angular預編譯      代碼體積較小

 ng build --prod   angular預編譯    代碼體積最小,訪問速度最快

   --prod 默認 開啟了--aot ,所以在使用--prod 和 --prod --aot是一樣的。

   

    關於JIT和AOT,復制了知乎上的一段話,講的很好。

 JIT和AOT的思想都一樣。在JAVA中,JIT(Just In Time即時編譯)是運行時優化,AOT(Ahead Of Time)是編譯時優化。

 什么是運行時優化?舉個例子,當虛擬機發現一段代碼調用的頻率很高,就會將這段代碼判定為熱點代碼,緊接着就會將這段代碼直接編譯為機器碼,從而提高這段代碼的運行速度。

 什么是編譯時優化?在編譯時將所有的代碼編譯成機器碼,這樣做會增加編譯時間,同時需要占用更多的存儲空間,但能夠提升程序的性能。

 如果你調試時使用AOT,會增加你的編譯時間。特別是項目比較大的時候,每做一次修改,都要編譯很久才能驗證。因此,調試時不應該使用AOT。

 

 

    下面轉自https://www.jianshu.com/p/2bb307ad94e7

  

  AOT是Ahead of Time compile 的縮寫,顧名思義提前編譯。

  關於AOT的好處,在這里就不一一細說,更高效,更安全,bla,bla....

  與AOT相對的則是JIT(Just in time),翻譯成中文就是即時編譯。

  對於瀏覽器而言,只認識JavaScript代碼,什么angular,typescript,html通通不認識。所以需要將我們寫好的諸多的angular組件翻譯成瀏覽器認識的語言。所以AOT 和 JIT 的本質區別就是, AOT是一種在構建階段(build)就將其翻譯成JavaScript的過程,而JIT 則是在運行階段即刻翻譯的過程。

  本文重點要說明的是對AOT的使用:

安裝依賴包

  AOT編譯使用ngc編譯器進行編譯,他是typescript編譯器tsc的高仿品,他們的配置方式幾乎一模一樣。

npm install@angular/compiler-cli @angular/platform-server--save

  配置文件 tsconfig-aot.json

  ngc需要一個AOT專用配置文件。

{
  "compilerOptions": { "target": "es5", "module": "es2015", "moduleResolution": "node", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "lib": ["es2015", "dom"], "noImplicitAny": true, "suppressImplicitAnyIndexErrors": true, "typeRoots": [ "./node_modules/@types/" ] }, "files": [ "src/app/app.module.ts", "src/main.ts" ], "angularCompilerOptions": { "genDir": "aot", "skipMetadataEmit" : true } } 

  對比JIT編譯, compilerOption里面只把module改成了es2015.
  真正和ngc有關的配置是angularCompilerOptions部分的內容。 它的genDir屬性告訴編譯器把編譯結果保存在新的aot目錄下。"skipMetadataEmit" : true屬性阻止編譯器為編譯后的應用生成元數據文件。 當輸出成TypeScript文件時,元數據並不是必須的,因此不需要包含它們。

特別注意: AOT編譯要求模板URL和外部cssU URL的值是一個相對於組件類文件的URL值

編譯應用

  使用ngc編譯器對應用進行編譯

node_modules/.bin/ngc -p tsconfig-aot.json

  編譯完成后,會生成一個aot目錄,目錄下面是一組NgFactory文件。每一個工廠文件都會在運行時結合JavaScript所封裝的css文件和模板文件,創建對應的組件實例。

啟動應用(bootstrap)

  啟動應用時候,從原來引導AppModule改成了引導工廠模塊AppModuleNgFactory.

配置build命令

  1. package.json 里面添加

"build": npm run build:aot"

總結

  開發器使用JIT, 產品期使用AOT

推薦文章:

  (一) JIT 與 AOT的區別 https://segmentfault.com/a/1190000008739157

  (二) 官方文檔 https://angular.cn/guide/aot-compiler



 


免責聲明!

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



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