为什么我们需要在 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 buildng serve 的默认值?

正如@Ingo Burk 在评论中提到的,我最终得到了相同的发现,所以我想 post 它作为答案。

我发现的另一件有趣的事情是,

但是在版本 5 及更高版本中,编译器会在发出 .js 文件时自动执行此重写

AOT 在性能方面很好,因为代码在加载到浏览器之前就已经编译了很多,就像在 JIT 中一样。 现在默认在 Angular 8 之后可用。 @CuriousBOy 和@Ingo 提到了一些首选 Jit 的用例。

我想为 动态组件和模块渲染添加一个用例

如果您需要在运行时创建组件并想要呈现它,您可能需要在浏览器中使用 JIT, 因为 AOT 将无法编译代码,因为动态组件和动态模块在构建时不可用