【发布时间】:2012-10-04 00:02:15
【问题描述】:
我了解到,使用 dart,由于快照,您的应用程序启动速度可以提高 10 倍。谁能解释它到底是什么以及它是如何工作的?我会在什么样的应用程序中使用快照?
【问题讨论】:
我了解到,使用 dart,由于快照,您的应用程序启动速度可以提高 10 倍。谁能解释它到底是什么以及它是如何工作的?我会在什么样的应用程序中使用快照?
【问题讨论】:
Dart 的快照类似于Smalltalk images,因为它们允许几乎即时的应用程序启动。但是,与 Smalltalk 图像不同,快照不存储程序状态。
这在速度较慢的移动设备中特别有用,因为它们本身速度较慢,并且比桌面系统更受内存限制。出于这个原因,再加上电池使用会迫使我们关闭不必要的程序这一事实使得启动速度变得很重要。
Dart 使用堆快照功能解决了这个启动缓慢的问题,这与 Smalltalk 的图像系统类似。遍历应用程序的堆并将所有对象写入一个简单文件。注意:目前,Dart 发行版附带了一个启动 Dart VM、加载应用程序代码的工具,并且在调用 main 之前,它会拍摄堆的快照。 Dart VM 可以使用这样的快照文件来快速加载应用程序。
快照功能还用于序列化在 Dart Isolate 之间发送的对象图(使用 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 这样按原样发送并在之后缓慢处理的源代码。 p>
您想在哪里使用它?任何可能的地方。在服务器端,它基本上已经发生在你身上(实际上并不重要)。但在客户端,这还是不可能的。据我了解,可以将这些快照提供给浏览器以供即时启动,但您确实需要等待,因为它现在不可用。
【讨论】: