[Day 25] Angular 2 事先編譯Ahead-of-Time (AoT) - iT 邦幫忙
文章推薦指數: 80 %
... 本身是即時編譯(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的部分移除,改成:
這個套件會和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}} 關閉
延伸文章資訊
- 1Ahead-of-time (AOT) compilation - Angular
The Angular ahead-of-time (AOT) compiler converts your Angular HTML and TypeScript code into effi...
- 2Ahead-of-Time Compilation - ts - COOKBOOK - Angular
The ahead-of-time (AOT) compiler can catch template errors early and improve performance by compi...
- 3Angular 4 教學- Webpack 預先編譯Ahead-of-Time (AOT)
Ahead-of-Time (AOT) 預先編譯,是在程式發佈之前就透過Angular Compiler 進行編譯,所以瀏覽器下載完的 *.js 檔案,就可以直接被執行,然後渲染畫面 ...
- 4[技術支援-5] 佈署方式JIT及AOT介紹 - iT 邦幫忙
AOT(Ahead-of-Time):在程式發佈之前就透過Angular Compiler 進行編譯,所以瀏覽器下載完的 *.js 檔案,就可以直接被執行,然後渲染畫面。 下表為這兩種佈署方式的...
- 5Ahead of Time Compilation (AoT) | Baeldung
AOT compilation is one way of improving the performance of Java programs and in particular the st...