我已经读到,使用dart,由于快照,应用程序的启动速度可以提高10倍.有人能解释一下它到底是什么,以及它是如何工作的吗?我将在哪种应用程序中使用快照?

推荐答案

DART的快照类似于Smalltalk images,因为它们允许几乎即时启动应用程序.但是,与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倍的原因是,它是not个源代码(如JavaScript),按原样发送,然后缓慢处理.

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

Dart相关问答推荐

我不明白在DART的`if()`语句中使用`case

如何判断一个数字是否是dart中另一个数字的倍数?

dart 中的 Function() 和 Function 有什么区别?

在 Flutter 中以间隔自动获取 API 数据

Flutter 错误:主体可能正常完成,导致返回null,但返回类型可能是不可为空的类型

如何在 dart 中获取当前和调用函数的名称?

如何计算列表中元素的出现次数

如何使我的Flitter应用程序的导航抽屉(Navigation Drawer)透明?

Flutter Null 安全迁移说Package doesn't exist

如何在Dart中按布尔对列表进行排序

如何在 Dart 语言中将 Future 转换为 List

如何判断一个字符串是否可以是 json.decode

dart- 四舍五入

如何在Dart中测试流

如何左对齐 Flutter 中的 OutlineButton 图标

Dart Nodejs 和 Socketio

可选参数的默认值必须是常量

Dart 中的 Math.round() 在哪里?

字符串枚举

Dart 如何获取枚举的value