17

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

4

1 回答 1

16

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

这在速度较慢的移动设备中特别有用,因为它们本质上速度较慢,并且比桌面系统更受内存限制。这个原因以及电池使用要求我们关闭不必要的程序这一事实使得启动速度很重要。

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

快照功能还用于序列化在 Dart 隔离之间发送的对象图(使用 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 这样按原样发送并在之后慢慢处理的源代码。

And where would you like to use it? Anywhere you possibly can. On the server side, it's basically already happening for you (and doesn't matter really). but on the client-side, that's not possible yet. As I understand it, it will be possible to serve these snapshots to the browser for instant startup, but you really have to wait since it's not available as of now.

于 2012-10-13T21:54:00.273 回答