飞镖中的快照概念是什么?

Ger*_*ero 13 snapshot dart

我已经读过,使用dart,由于快照,你的应用程序可以启动速度提高10倍.任何人都可以解释它到底是什么以及它是如何工作的?在什么样的应用程序中我会使用快照?

Kai*_*ren 11

Dart的快照就像Smalltalk图像,因为它们允许几乎即时的应用程序启动.但是,与Smalltalk图像不同,快照不存储程序状态.

这在较慢的移动设备中尤其有用,因为它们本身速度较慢,并且受内存的限制远远超过桌面系统.这个原因和电池使用需要我们关闭不必要的程序的事实使启动速度变得重要.

Dart通过堆快照功能解决了这个慢启动问题,这与Smalltalk的图像系统类似.遍历应用程序的堆,并将所有对象写入简单文件.注意:目前,Dart发行版附带了一个工具,可以启动Dart VM,加载应用程序的代码,在调用main之前,它会获取堆的快照.Dart VM可以使用此类快照文件快速加载应用程序.

快照功能还用于序列化在Dart Isolates(使用SnapshotWriter序列化)之间发送的对象图.

目前我不知道如何启动快照或处理它们.在将来,我希望可以从Web服务器提供快照文件,并立即由浏览器Dart VM处理.

快照格式本身是跨平台的,这意味着它可以在32位,64位机器之间工作,等等.格式已经制作,因此可以快速读入内存,并强调最小化指针修正等额外工作.

以下是snapshot.cc的源代码:http://code.google.com/p/dart/source/browse/trunk/dart/runtime/vm/snapshot.cc

和测试:http://code.google.com/p/dart/source/browse/trunk/dart/runtime/vm/snapshot_test.cc

因此,它可以将应用程序启动速度提高10倍的原因是因为它不是像JavaScript一样的源代码,而是按原样发送并在之后缓慢处理.

你想在哪里使用它?你可能在任何地方.在服务器端,它基本上已经发生在您身上(并不重要).但在客户端,这是不可能的.据我了解,可以将这些快照提供给浏览器以便即时启动,但是您必须等待,因为它现在不可用.

  • 此外,我不认为快照就像smalltalk图像.Dart快照只是令牌流的二进制序列化,通过解析代码生成.快照不是"正在运行的程序的快照",它是在将令牌转换为机器代码之前生成的.因此,快照中不会捕获任何程序状态.免责声明,我不是一个smalltalk图像专家. (2认同)