[Day 25] Angular 2 事先編譯Ahead-of-Time (AoT) - iT 邦幫忙

文章推薦指數: 80 %
投票人數:10人

... 本身是即時編譯(Just-in-Time, JiT),瀏覽器先讀取我們的檔案,然後瀏覽器邊看邊編譯,但這樣比起有先編譯過當然慢了多,如果事先編譯(Ahead-of-Time, AoT) 的話, ... 2017iT邦幫忙鐵人賽 DAY 25 1 ModernWeb Angular2之30天邁向神乎其技之路系列第 25篇 [Day25]Angular2事先編譯Ahead-of-Time(AoT) 2017鐵人賽 aot 微中子 2017-01-0923:47:089740瀏覽 前言 Angular2雖然是一套強大框架,但最後輸出仍然為html、js、css檔案,js本身是即時編譯(Just-in-Time,JiT),瀏覽器先讀取我們的檔案,然後瀏覽器邊看邊編譯,但這樣比起有先編譯過當然慢了多,如果事先編譯(Ahead-of-Time,AoT)的話,當我們用瀏覽器打開時,就不用編譯,於是體驗速度就快了許多,此外編譯過的程式碼也會比原始碼輕量。

由於先編譯過,如果有bug的話也會很容易發現。

AoT 在Angular2中有幾種方式可以建構AoT網頁: 1.使用開發環境 2.直接使用ngc 3.@ngtools/webpack套件 如果要建立AoT要做多設定,後面兩種屬於要自己重頭硬幹的方式,介紹起來真的很複雜,所以我簡單帶過,通常我們也不需要這樣做。

附上一些文章供大家參考: 官方文件 Ahead-of-TimeCompilationinAngular BuildinganAngular2ApplicationforProduction 1.使用開發環境 這邊開發環境是指Angular-Seed這類的環境,或是別人已經打包好的AoT開發專案直接拿來使用。

Angular-Seed Angular-Seed是Angular第二受歡迎的開發環境 $gitclone--depth1https://github.com/mgechev/angular-seed.git $cdangular-seed #安裝套件 $npminstall #快一點安裝套件(用Yarn:https://yarnpkg.com) $yarninstall#oryarn #AoTcompilation編譯檔案,檔案會產生在`dist/prod` $npmrunbuild.prod.aot 2.ngc 採用AngularCLI開發 首先要安裝套件 npminstall@angular/compiler-cli@angular/platform-server--save 建立一個tsconfig-aot.json { "compilerOptions":{ "target":"es5", "module":"es2015", "moduleResolution":"node", "sourceMap":true, "emitDecoratorMetadata":true, "experimentalDecorators":true, "lib":["es2015","dom"], "noImplicitAny":true, "suppressImplicitAnyIndexErrors":true }, "files":[ "app/app.module.ts", "app/main.ts" ], "angularCompilerOptions":{ "genDir":"aot", "skipMetadataEmit":true } } 編譯 node_modules/.bin/ngc-ptsconfig-aot.json Bootstrap也要調整 //app/main.ts import{platformBrowser}from'@angular/platform-browser'; import{AppModuleNgFactory}from'../aot/app/app.module.ngfactory'; platformBrowser().bootstrapModuleFactory(AppModuleNgFactory); Rollup:一種treeshaking的技巧,就是把多餘無用的code像搖樹般搖掉。

首先要安裝 npminstallrolluprollup-plugin-node-resolverollup-plugin-commonjsrollup-plugin-uglify--save-dev 然後增加一個rollup-config.js檔案 importrollupfrom'rollup' importnodeResolvefrom'rollup-plugin-node-resolve' importcommonjsfrom'rollup-plugin-commonjs'; importuglifyfrom'rollup-plugin-uglify' exportdefault{ entry:'app/main.js', dest:'dist/build.js',//outputasingleapplicationbundle sourceMap:false, format:'iife', plugins:[ nodeResolve({jsnext:true,module:true}), commonjs({ include:'node_modules/rxjs/**', }), uglify() ] } 執行rollup node_modules/.bin/rollup-crollup-config.js 把index.html中用SystemJS的部分移除,改成:

Loading... 這樣就完成囉! 3.@ngtools/webpack 首先要裝這個套件 npminstall-D@ngtools/webpack 設定成developmentdependency 接著加入Webpackconfiguration檔案webpack.config.js,並加入以下內容: import{AotPlugin}from'@ngtools/webpack' exports={/*...*/ module:{ rules:[ { test:/\.ts$/, loader:'@ngtools/webpack', } ] }, plugins:[ newAotPlugin({ tsConfigPath:'path/to/tsconfig.json', entryModule:'path/to/app.module#AppModule' }) ] } 這邊@ngtools/webpack會取代typescript載入器像是ts-loader或awesome-typescript-loader。

這個套件會和AotPlugin一起完成AoT編譯。

留言 追蹤 檢舉 上一篇 [Day24]Angular2+Ionic=MobileApp(4)發布App 下一篇 [Day26]Angular2裝飾器@ContentChild 系列文 Angular2之30天邁向神乎其技之路 共31篇 目錄 RSS系列文 訂閱系列文 205人訂閱 27 [Day27]Angular2裝飾器@ViewChild 28 [Day28]Angular2製作tab元件 29 [Day29]Angular2@Directive 30 [Day30]Angular2單元測試UnitTest 31 [Day31]Angular2給初學者的學習指南 完整目錄 尚未有邦友留言 立即登入留言 iT邦幫忙鐵人賽 參賽組數 1087組 團體組數 52組 累計文章數 20492篇 完賽人數 572人 鐵人賽最新文章 Day36-使用Container建立AmazonSageMaker端點 Day35-AmazonSageMaker簡介 今天來瞄一眼龍與雀的科技:知覺共享技術Body-sharing 更新網格交易機器人 Day34-實作S3驅動Lambda函數進行YOLO物件辨識 建立第一個RESTfulapiserver(設定環境變數篇)-7(Day19) Day48.下載個範例iosapp來試著build 原來Arduino開發板的腳位與程式內數字的對應會隨著開發商不同而改變? EP32:TopStoreAppwith.NETMulti-platformAppUI(MAUI) [Day32]HexoxGitHubPages主題自訂樣式+問題排除 前往鐵人賽 技術推廣專區 [Day2]抓取每日收盤價 [Day1]基本工具安裝 利用python取得永豐銀行API的Nonce 永豐金融API測試員 [Day03]tinyML開發板介紹 [Day01]在享受tinyML這道美食之前 [Day3]使用ta-lib製作指標 計算API所需要的參數:HashID [Day4]函數打包與買進持有報酬率試算 計算API所需要的參數:IV 前往鐵人賽 熱門問題 電信商說我透過Steam或是PS4下載遊戲是異常封包而斷我網路,怎麼辦? 請問vSphere裡面的網路硬碟.有辦法可以用WIN連線網路硬碟.目前只知道IP&管理帳密.要將VM儲存區掛給VeeamBackup 有關新手SQL問題一問 有人知道怎麼解決gmail一直擋信的問題? LINUX帳戶密碼最大使用期限90天 Win10的系統還原 線上版文書處理除了Google雲端,365,還有其他選擇嗎? Windows2008R2如何讀取ISO檔 Server掛掉,Acronis的備份檔無法復原 MSSQL資料庫主機Ping的到,但無法連線 IT邦幫忙 站方公告 2021iThome鐵人賽精彩文章超過2萬篇,預計12月揭曉本屆獲勝鐵人 熱門tag 看更多 13th鐵人賽 12th鐵人賽 11th鐵人賽 鐵人賽 2019鐵人賽 2018鐵人賽 javascript 2017鐵人賽 windows php python windowsserver linux c# 程式設計 資訊安全 css vue.js sql 分享 熱門回答 有關新手SQL問題一問 請問vSphere裡面的網路硬碟.有辦法可以用WIN連線網路硬碟.目前只知道IP&管理帳密.要將VM儲存區掛給VeeamBackup MSSQL資料庫主機Ping的到,但無法連線 TIPTOPmail MSSQLUNION後進階排序問題請教 線上版文書處理除了Google雲端,365,還有其他選擇嗎? 電信商說我透過Steam或是PS4下載遊戲是異常封包而斷我網路,怎麼辦? Windows2008R2如何讀取ISO檔 求助!用ExcelUserForm來Update資料到SQL (已解決)Vue.jsv-for顯示問題 熱門文章 【第31天】番外篇-Windows+YOLOV4本地端訓練 建立第一個RESTfulapiserver(設定環境變數篇)-7(Day19) 原來Arduino開發板的腳位與程式內數字的對應會隨著開發商不同而改變? Day48.下載個範例iosapp來試著build Day34-實作S3驅動Lambda函數進行YOLO物件辨識 【換機必學】將資料從Android轉移到iOS的兩種方法 EP32:TopStoreAppwith.NETMulti-platformAppUI(MAUI) [Day32]HexoxGitHubPages主題自訂樣式+問題排除 Day47.buildaiosappinunity 免費錄影!原來Windows10有内建的螢幕錄影工具 一週點數排行 更多點數排行 海綿寶寶(antijava) raytracy(raytracy) ccenjor(ccenjor) rogeryao(rogeryao) ㊣浩瀚星空㊣(yoching) Samuel(kuanyu) 純真的人(jer5173) huahualiu(ffang55tw) juck30808(juck30808) asd3733653(asd3733653) × At 輸入對方的帳號或暱稱 Loading 找不到結果。

標記 {{result.label}} {{result.account}} 關閉


請為這篇文章評分?