在dartlang中,莳萝和内核快照之间有什么区别?

时间:2019-03-12 07:25:00

标签: dart

考虑-
文件编码, 文件大小 内部数据结构, 启动时间等

选择dill文件启动dart应用程序的主要原因是什么? 哪一个具有更好的启动时间性能?为什么呢?

1 个答案:

答案 0 :(得分:0)

https://mrale.ph/dartvm/是Dart语言团队长期成员的精彩总结。

据我了解,莳萝文件和内核快照是同一回事。 dill只是用于内核(AoT快照)的文件扩展名

  

由于Dart 2 VM不再具有直接从原始源执行Dart的功能,因此VM希望获得包含串行化Kernel AST的Kernel二进制文件(也称为莳萝文件)。快照

我假设您真正想知道的是AoT和JiT快照之间的区别。

  

最初的快照不包含机器代码,但是这   后来在开发AOT编译器时添加了此功能。动机   用于开发AOT编译器和带代码的快照是为了允许VM   在由于平台而无法进行JITing的平台上使用   级别限制。

     

带代码的快照的工作方式几乎与普通快照相同   两者之间的差别很小:它们包含一个与   快照的其余部分不需要反序列化。这段代码   放置的部分使其可以直接成为堆的一部分   映射到内存后。

启动时间

  

引入了AppJIT快照,以减少大型Dart应用程序(如dartanalyzer或dart2js)的JIT预热时间。当这些工具用于小型项目时,他们花费的实际时间与VM花费的JIT编译这些应用程序的时间一样。

所以使用JiT的主要原因是因为不允许AoT(主要是iOS) 或对于寿命短的命令,根据代码使用情况(热点)进行连续优化不太可能导致任何结果。

有关尺寸的讨论,另请参见https://github.com/dart-lang/sdk/issues/28655#issuecomment-428370886