在flutter应用程序中,运行应用程序时,JIT和AOT编译之间存在很大差异,但在服务器应用程序中,差异很小,有时AOT模式比JIT慢。为什么会发生这种情况?这是否意味着服务器应用程序的 dart 在 AOT 模式下没有优化那么多?什么情况下适合使用JIT模式?
对于任何想要测试的人都可以使用这个存储库
Vya*_*rov 10
我领导 Dart 本机运行时编译管道的开发。凯文的回答非常好,但我想在这里添加更多色彩。
Flutter 社区的普遍看法是, Flutter 的debug模式因为 JIT 和release的原因而很慢,但这并不完全正确。实际上,Flutter 框架充满了大量非常慢的一致性检查/断言,这些检查/断言仅在调试模式下启用。这就是大部分缓慢的原因。禁用这些断言将使这种比较更加同类。
JIT 和 AOT 各有不同的优点和缺点。
AOT 非常适合 UI,因为 UI 无法容忍 JIT 的不可预测性和预热时间。
JIT 对于批处理模式代码很有用。
这是 AOT 和 JIT 之间的基本比较。现实更为复杂和微妙。从理论上讲,JIT 几乎总是应该有更好的峰值性能,但今天并不完全正确。它高度依赖于特定的代码——它是否会在 AOT 或 JIT 中运行得更快。
事实上,我们已经有一段时间忽略了 JIT 性能,而把时间花在了 AOT 性能和代码大小上。有些事情(比如调用)在 AOT 中比 JIT 快得多。
希望这能解释景观。我将看一下您的示例,并针对特定测试用例提供更深入的响应 - 但这需要一些时间。
AOT 会更小(您可以跳过完整的 SDK)并且启动速度更快 \xe2\x80\x93\xc2\xa0no JIT。
\n一个有趣的细节:对于长时间运行的进程来说,JIT 可能总是更快,因为 JIT 编译器会随着时间的推移使用有关进程如何执行的信息来优化代码。
\nAOT 编译器根据磁盘上代码的详细信息进行最佳猜测优化,但没有运行时信息。
\n对于需要快速冷启动且可能不会运行很长时间的无服务器或微服务,我们建议使用 AOT 模型。
\n如果您有长期运行的服务或者您真正关心最大可能的性能(不太关心启动时间或部署大小),您可能需要坚持使用 JIT。
\n| 归档时间: |
|
| 查看次数: |
1735 次 |
| 最近记录: |