注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

韩国恺的博客

hanguokai.com

 
 
 

日志

 
 

Dart 中的 snapshot  

2013-02-20 13:53:31|  分类: Dart |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
snapshot 及其主要用途
snapshot 是 Dart 程序的二进制序列化形式,和对象在 isolate 中的内存形式接近。

snapshot 的主要目的是提高 dart 程序的启动速度。
和读取源代码相比,snapshot 无需解析源代码,而是直接还原到程序开始执行前的初始状态。
dart 核心库、dart2js 等都会使用 snapshot 提高程序的启动速度。

snapshot 比从源代码加载要快得多,比正常的 JavaScript 启动速度快 10 倍。
而 JavaScript 很难做到这点,因为 JavaScript 的源码会有副作用,不能被实现为 snapshot 。

不管是桌面 Web、移动 Web 还是 server 端程序,快速的启动都是很有用的。
snapshot 特别适合较大型的 Web App ,比如 Gmail 在启动的时候需要预先读取 1MB 的 JavaScript 源代码,但如果是读取缓存在浏览器中的 Dart snapshot ,那么启动时间只需完整读取源代码启动时间的 1/10 。

当前 Dart 团队正在尝试减小 snapshot 的大小,因为这会直接影响到启动速度。

snapshot 除了提高启动速度外,还用于 isolate 之间的对象(消息)传递。

snapshot 的两种执行环境:
  • 对于 Web App,什么都不用做,浏览器会自动使用 snapshot。因为支持 Dart VM 的浏览器会自动创建应用的 snapshot ,下次执行的时候浏览器就会从缓存中使用应用的 snapshot 执行。
  • 对于命令行程序,你可以自己创建应用的 snapshot 用于启动,就像 dart2js 那样。

snapshot 的几种形式:
  • 完全快照(full snapshot):表示初始化之后 isolate 堆内存的完全表示。用于加快 dart 核心库及其它 dart 内置库的启动和初始化速度。
  • 脚本快照(script snapshot):表示应用加载之后执行之前 isolate 堆内存中的应用脚本。用于加快应用的启动和初始化速度。
  • 对象快照(object snapshot):表示 Dart VM 中 isolate 之间传递的消息对象。

基本用法:
生成 snapshot 使用 --generate-script-snapshot 选项,如:

dart --generate-script-snapshot=foo.snapshot foo.dart

另外,可以使用 --package_root 选项指定用到的包的位置:

dart [--package_root=path] --generate-script-snapshot=out-file dart-script-file


使用 snapshot:

dart --use-script-snapshot=snapshot-file dart-file args

参数就是需要传递给应用本身的参数。

参考资料:Snapshots in Dart
  评论这张
 
阅读(1335)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018