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。
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命令
- package.json 里面添加
"build": npm run build:aot"
总结
开发器使用JIT, 产品期使用AOT
推荐文章:
(一) JIT 与 AOT的区别 https://segmentfault.com/a/1190000008739157
ng build --aot 与 ng build --prod的更多相关文章
- vue-cli脚手架build目录中的build.js配置文件
该随笔收藏自: vue-cli脚手架build目录中的build.js配置文件 这个配置文件是命令npm run build 的入口配置文件,主要用于生产环境 由于这是一个系统的配置文件,将涉及很多的 ...
- 不知道张(zhāng)雱(pāng)是谁?你out了!
张(zhāng)雱(pāng)是谁?也许你已经听说过了,也许你还没听说过呢,不过你一定听说过老刘——刘强东,没错,这二人是有关系的,什么关系,京东是老刘的,而张雱呢?张雱是京东旗下52家关联公司法人代 ...
- Build Error 6041: Internal build error
Note: Following content is reprinted from the Original article Flexera : Build Error 6041. Only for ...
- Angular6之ng build | ng build --aot | ng build --prod 差异
由于写了大半年的项目终于要告一段落并且即将进行第二阶段优化开发,emmm 基础版本已经二十多个模块了,必不可少的优化是很重要的,尽管项目上使用多层嵌套懒加载,但是在首屏加载的时候,任然很慢啊,因为一直 ...
- vue-cli脚手架build目录中的webpack.prod.conf.js配置文件
// 下面是引入nodejs的路径模块 var path = require('path') // 下面是utils工具配置文件,主要用来处理css类文件的loader var utils = req ...
- build.gradle(Project) 和 build.gradle(Module) 的区别
参考: http://stackoverflow.com/questions/28295933/difference-between-build-gradleproject-and-build-gra ...
- NDK Build 用法(NDK Build)
1.ndk-build的用法 Android NDKr4引入了一个新的.小巧的shell脚本ndk-build,来简化源码编译. 该文件位于NDK根目录,进入你的工程根目录或子目录之后,在命令行下调用 ...
- InstallShield Build错误:Internal build error 6041
点击左侧菜单: Media-Release-选择release版本(例如Release1)-Build标签- keey unused directories 改为no(默认为yes)
- jenkins的slave没有执行build,slave执行build失败
1.slave的build配置如下 2.但是从控制台输出日志来看,pre steps和post steps都执行了,但是build没有执行 3.最后的错误信息如下: ERROR: Failed to ...
随机推荐
- CentOS下安装好python和opencv,却import cv2失败
在安装好CentOS和OpenCV后,在终端输入python,在输入import cv2.却报错:ImportError:Mo module named cv2.浏览Python下文件夹发现cv2.s ...
- 共享手机网络给电脑(USB连接)
华为手机步骤: 设置-->搜索-->hdb-->允许HiSuite通过HDB连接设置 设置-->无线和网络-->移动网络共享-->USB共享网络
- centos7下的/etc/rc.local自启动程序
在centos6中有一个/etc/rc.local的启动文件,只要把需要经常启动的程序添加到此文件下并执行source /etc/rc.local就可以实现开机启动了. 在centos7中不知道也是如 ...
- 一图一知-TS之symbol
- Solving Docker permission denied while trying to connect to the Docker daemon socket
The error message tells you that your current user can’t access the docker engine, because you’re la ...
- filebeat configure
docker run -d --rm -v ./filebeat.yml:/usr/share/filebeat/filebeat.yml -v /var/log:/var/log docker.e ...
- python打开excel跳转对应分页
需求: 在python脚本层,直接打开excel,跳转特定分页,方便策划编辑 尝试了几种不同的方法,最终选择了方法4.4种方法都可以实现打开外部文件,3.4可以实现跳转特定分页.3和4的区别是,3通过 ...
- CodeForces 837F - Prefix Sums | Educational Codeforces Round 26
按tutorial打的我血崩,死活挂第四组- - 思路来自FXXL /* CodeForces 837F - Prefix Sums [ 二分,组合数 ] | Educational Codeforc ...
- NodeList类数组对象: HTMLCollection , NamedNodeMap,两套API(childNodes , children)
快捷键:leishuzuduixiang(类数组对象) bianlijiedian(遍历节点) jiedian(节点) htmlcollection , namednodemap , nodel ...
- Laravel 事件侦听的几个方法 [Trait, Model boot(), Observer Class]
1 Trait 1.1 可以在 Trait 中定义一个静态的 bootFooBar() 方法,注:FooBar 是你的 Trait 名称 namespace App\Traits; use App\A ...