【问题标题】:Why does Angular 2 have JiT compilation for templates?为什么 Angular 2 对模板进行 JiT 编译?
【发布时间】:2017-02-04 22:34:44
【问题描述】:

在运行时在浏览器中对 Angular 2 HTML 模板进行 JiT 编译的基本原理是什么?

我知道,Ahead-of-time compilation 的存在就是为了解决这个问题,它极大地提高了启动性能。

我不是在问我应该使用 JiT 还是 AoT 编译。

TypeScript 编译器能够编译 JSX,这是否意味着有一天我们将获得对 Angular 2 模板的相同支持,以替代 @angular/compiler-cli

【问题讨论】:

    标签: angular jit angular2-template angular2-aot


    【解决方案1】:

    生产

    如果组件是在运行时动态创建的,例如从数据库加载模板标记时,这是必需的。

    我认为应该避免这种方法,但有些用例很难解决。

    也有人讨论过,AoT 会导致某些应用程序的代码量变大,这会占用 AoT 编译组件所需的较短初始化时间。

    什么是您的用例的最佳选择取决于您的应用程序以及 Angular2 团队将能够完成的优化(我很确定他们正在尝试很多想法来获得更小的构建输出和更短的初始化时间)

    另见How to realize website with hundreds of pages in Angular2

    发展 它在开发过程中也很方便,因为编辑-重新加载周期更快,但对于生产(部署),您通常需要 AoT。

    【讨论】:

    • 感谢您的回答!这听起来像是将 JiT 作为提供模板的默认方式的一个非常具体的用例。
    • 它在开发过程中很方便,因为编辑-重新加载周期更快,但对于生产(部署),您通常需要 AoT。
    • 这种说法对我来说听起来更合理,你能更新你的答案吗?
    • 这一切都很好,但我仍然不明白为什么不能在捆绑过程中简单地使用 JIT。为什么我们需要一个完全不同的 AoT 堆栈?此外,对于 AoT,您必须编写与 JIT 不同的代码。我认为这是一种糟糕的开发人员体验。我只是无法获得有关这种增加的(看似不必要的)复杂性背景的任何信息。那么有解释吗?
    • @Szobi 你是对的。 JIT 是从编程语言空间(而不是框架空间)借用的术语,Angular 以此类推使用。不幸的是,这个类比是不正确的,因为正如您所指出的,您必须编写不同的代码。长话短说,这是一个带有主观答案的设计问题。由于这种分叉绝不是一种常见的做法,因此您更有责任问自己是否同意此设计决策的权衡以及您对它所涉及的整体设计的影响有何看法。
    猜你喜欢
    • 2022-01-11
    • 2023-03-29
    • 2018-01-23
    • 2018-05-01
    • 2018-09-23
    • 2016-11-23
    • 2011-04-07
    • 1970-01-01
    • 2020-06-20
    相关资源
    最近更新 更多