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

时间:2012-10-13 08:43:56

标签: snapshot dart

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

1 个答案:

答案 0 :(得分:10)

Dart的快照就像Smalltalk images一样,它们允许几乎即时的应用程序启动。但是,与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)按原样发送并在之后缓慢处理。

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