2012-10-13 46 views
10

我已经阅读了dart,因为快照,您的应用程序可以启动速度提高10倍。任何人都可以解释它是什么以及它是如何工作的?我将在哪种应用程序中使用快照?飞镖中的快照概念是什么?

回答

9

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

这对速度较慢的移动设备特别有用,因为它们固有地较慢,并且还受内存限制,远远超过桌面系统。这个原因以及电池使用让我们关闭不必要的程序的事实使启动速度变得重要。

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

快照功能还用于序列化在飞镖隔离区(使用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这样的源代码原样发送并在之后缓慢处理。

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

+0

应该注意,使用快照加载dart2js时,我们已经看到10X的启动改进。 –

+0

@SethLadd你能详细说明你的意思吗?或者编辑我的答案 - 毕竟这是一个wiki :) –

+0

最初的测试表明,从快照启动dart2js比从源代码启动dart2js快10倍。这还为时尚早,但数据看起来很有希望。 –