我在查阅本文档时遇到了编译概念。可以使用JIT或AOT编译。但是,我发现它非常简短,需要详细了解以下几点,
- 这两种技术之间的差异
- 关于何时使用什么的建议
我在查阅本文档时遇到了编译概念。可以使用JIT或AOT编译。但是,我发现它非常简短,需要详细了解以下几点,
Answers:
JIT-及时编译TypeScript以执行它。
AOT-在构建阶段编译TypeScript。
尽管有一些答案,但我也想补充一下我的发现,因为在所有情况下我都对实际正在编译的内容感到困惑,TS
-> JS
发生了转换。我以Jeff博客中的一些段落为参考。
该TS
开发者编写的代码被编译到JS
代码。现在,已编译的js
代码将由浏览器再次编译,以便html
可以根据用户操作动态呈现,并angular
在运行时相应地生成(用于组件,更改检测,依赖注入)的代码。
(浏览器编译器采用应用程序的指令和组件以及它们相应的HTML和CSS,并创建组件工厂以使用其所有视图创建逻辑快速删除实例。)
在浏览器中引导Angular 2应用程序时,JIT编译器会执行大量工作来在运行时分析应用程序中的组件并在内存中生成代码。刷新页面后,所有已完成的工作都将被丢弃,并且JIT编译器将重新进行所有工作。
该TS
开发者编写的代码被编译到JS
代码,这js
已经被编译为角以及。现在,已编译的 js
代码将由浏览器再次编译,以便html
可以呈现。但是,这里的问题是编译器angular
已经照顾了它们的功能,AOT
因此浏览器不必太担心组件创建,更改检测和依赖注入。因此,我们有:
更快的渲染
使用AOT,浏览器将下载该应用程序的预编译版本。浏览器加载可执行代码,因此它可以立即呈现应用程序,而无需等待首先编译应用程序。
异步请求更少
编译器在应用程序JavaScript中内联外部HTML模板和CSS样式表,从而消除了对那些源文件的单独ajax请求。
较小的Angular框架下载大小
如果应用程序已经编译,则无需下载Angular编译器。编译器大约是Angular本身的一半,因此省略编译器会大大减少应用程序的有效负载。
尽早检测模板错误
在用户看到它们之前,AOT编译器会在构建步骤中检测并报告模板绑定错误。
更好的安全性
AOT很早就将HTML模板和组件编译为JavaScript文件,然后才提供给客户端。没有要读取的模板,没有风险的客户端HTML或JavaScript评估,注入攻击的机会就更少了。
剩余的差异已经在Benyamin,Nisar和Gaurang的要点中涵盖。
随时纠正我
本雅明和尼萨尔在这里提到了一些优点。我将添加到它。
从理论上讲,就生产目的而言,AOT似乎比JIT更具吸引力,但我怀疑AOT是否真的值得!
好吧,我发现Jeff Cross提供了不错的统计数据,它确实证明AOT大大减少了该应用程序的启动时间。在Jeff Cross的帖子下面的快照中,您可以快速了解一下,
JiT(及时)编译
名称本身描述了工作方式,它只是在将页面加载到浏览器中时编译代码。浏览器将下载编译器并构建应用程序代码并进行渲染。
这将有利于开发环境。
AoT(提前)编译
它在构建应用程序时编译所有代码。因此,浏览器不想下载编译器并编译代码。在这种方法中,浏览器只需加载已编译的代码即可轻松呈现应用程序。
可以在生产环境中使用
我们可以如下比较JiT和AoT编译
JIT(及时编译)
即时(JIT)是一种编译类型,可在运行时在浏览器中编译您的应用程序。
ng build
ng serve
AOT(提前编译)
提前(AOT)是一种编译类型,可在构建时编译您的应用程序。
ng build --aot
ng serve --aot