为什么我们需要在 angular prod build 中设置“--aot false”?
Why do we ever need to set "--aot false" in angular prod build?
我知道“ahead of time compilation
”在构建时提供编译。 --aot
还有很多其他优点,例如
应用程序是预编译的,所以没有这样的等待模板
绑定错误将在构建时等时知道。
但是,还有一个选项可以将 --aot
设置为 false(对于产品构建也是如此)。为什么我们需要将 --aot
设置为 false
?换句话说,--jit
提供了什么样的优势?我只是想了解使用 --aot
是否比 --jit
有任何缺点,因为否则,听起来我应该始终使用 --aot
即使在开发版本中也是如此。如果使用 --aot
没有权衡取舍,那么为什么不将其设置为 ng build
和 ng serve
的默认值?
正如@Ingo Burk 在评论中提到的,我最终得到了相同的发现,所以我想 post 它作为答案。
- Angular 9 实际上现在默认使用 AOT。
- AOT 比 JIT 花费的时间更长(因此对于快速测试一些小修复,它可能会有用)
- The AOT collector only understands a subset of JavaScript. Define metadata objects with the following limited syntax
我发现的另一件有趣的事情是,
但是在版本 5 及更高版本中,编译器会在发出 .js 文件时自动执行此重写
AOT 在性能方面很好,因为代码在加载到浏览器之前就已经编译了很多,就像在 JIT 中一样。
现在默认在 Angular 8 之后可用。
@CuriousBOy 和@Ingo 提到了一些首选 Jit 的用例。
我想为 动态组件和模块渲染添加一个用例。
如果您需要在运行时创建组件并想要呈现它,您可能需要在浏览器中使用 JIT,
因为 AOT 将无法编译代码,因为动态组件和动态模块在构建时不可用。
我知道“ahead of time compilation
”在构建时提供编译。 --aot
还有很多其他优点,例如
应用程序是预编译的,所以没有这样的等待模板
绑定错误将在构建时等时知道。
但是,还有一个选项可以将 --aot
设置为 false(对于产品构建也是如此)。为什么我们需要将 --aot
设置为 false
?换句话说,--jit
提供了什么样的优势?我只是想了解使用 --aot
是否比 --jit
有任何缺点,因为否则,听起来我应该始终使用 --aot
即使在开发版本中也是如此。如果使用 --aot
没有权衡取舍,那么为什么不将其设置为 ng build
和 ng serve
的默认值?
正如@Ingo Burk 在评论中提到的,我最终得到了相同的发现,所以我想 post 它作为答案。
- Angular 9 实际上现在默认使用 AOT。
- AOT 比 JIT 花费的时间更长(因此对于快速测试一些小修复,它可能会有用)
- The AOT collector only understands a subset of JavaScript. Define metadata objects with the following limited syntax
我发现的另一件有趣的事情是,
但是在版本 5 及更高版本中,编译器会在发出 .js 文件时自动执行此重写
AOT 在性能方面很好,因为代码在加载到浏览器之前就已经编译了很多,就像在 JIT 中一样。 现在默认在 Angular 8 之后可用。 @CuriousBOy 和@Ingo 提到了一些首选 Jit 的用例。
我想为 动态组件和模块渲染添加一个用例。
如果您需要在运行时创建组件并想要呈现它,您可能需要在浏览器中使用 JIT, 因为 AOT 将无法编译代码,因为动态组件和动态模块在构建时不可用。