BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

DeltaBlue基准测试显示 Dart2js生成的JavaScript代码优于手写代码

| 作者 Zef Hemel 关注 0 他的粉丝 ,译者 臧秀涛 关注 2 他的粉丝 发布于 2013年4月12日. 估计阅读时间: 5 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

Google发布了新版Dart2js编译器DeltaBlue基准测试(用于测试面向对象语言的常用基准测试程序)显示,该编译器生成的JavaScript代码优于手写代码。尽管Dart2js项目从未以此为目标,但是它所应用的各种优化,如内联(inlining)和预先计算(pre-computation)等,使某些Dart程序跑得比语义等价的地道JavaScript代码还快。Dart网站还发布了Richards基准测试的结果,然而它的数据就是缓慢收敛的了,在这种基准测试程序下,Dart生成的JavaScript代码仍然比手写的代码慢26%。

下图显示了Dart在DeltaBlue基准测试程序上性能随时间演进的情况:

图中紫色的线代表Dart2js生成的JavaScript代码在Google v8 JavaScript引擎上的运行情况,黄线代表语义等价的地道JavaScript代码在v8上的运行情况。最上面的蓝线代表的是Dart代码在原生Dart虚拟机上的运行情况。数值越高表示性能越好。

Dart是Google为开发大规模Web应用程序而设计的新编程语言,可以运行在如下各种环境中:

  1. 运行在嵌入了Dart虚拟机的浏览器中。因为Dart项目尚未发布1.0版本,所以除了“Dartium”这一Chromium构建版本提供了Dart SDK之外,还没有哪个浏览器嵌入Dart虚拟机。
  2. 在服务器端,运行于Dart虚拟机中。dart:io库只能用于服务器端应用,它提供了用于访问文件系统和进程管理信息、以及用于构建服务器(比如HTTP服务器或WebSocket服务器)的API。这就使Dart可用于与Node.js类似的场景,而且从前端到后端的应用开发都可以使用Dart。
  3. 嵌入在应用程序中运行。Dart虚拟机可用嵌入在任何C/C++应用程序中,从而支持Dart应用。
  4. 编译为JavaScript代码,运行在任何现代浏览器中。目前还没有哪个产品级浏览器支持Dart,除了Chrome外,是否有浏览器准备嵌入Dart虚拟机还不得而知。不过利用Dart2js编译器将Dart程序编译为JavaScript代码,仍然能够在各种浏览器中运行Dart应用。因此,Dart能否成功,生成的JavaScript代码的性能至关重要。

新的Dart2js编译器本身就是用Dart实现的,为了收集变量和参数将使用类型的更多信息,它使用了一种名为“全局类型推导(global type inferencing)”的技术。因此可以生成更紧凑、更快速的JavaScript代码。有趣的是,Dart2js并没有使用Dart所支持的可选类型标注。这是因为运行时并没有这些类型信息。除非Dart运行于检查模式(checked mode),这时如果破坏了类型约束,Dart会报错。因此像String name = 10;这样的语句,尽管让人迷惑不解,却是完全合法的。为确保所生成代码的正确性,Dart2js编译器完全忽略了类型标注。

因为Dart不像JavaScript那么自由,因而有可能进行很多新的优化。比如,在JavaScript中,可以动态向对象中添加方法,可以替换方法,可以动态下载代码,还可以使用eval和with语句,这极大限制了像v8这样的JavaScript引擎可以执行的优化。这些功能中有很多Dart都不支持,因此Dart2js在执行时可以精确地知道哪些代码会运行。它能够消除输出中用不到的代码,该过程称为死代码消除或tree shaking。某些情况下,它还可以内联代码,因为不同于JavaScript,Dart不支持动态修改(monkey patching)对象。

尽管我们不应轻信任何基准测试,但看看Dart团队如何不断改进性能数据也是很有趣的。虽然Dart还处于积极的开发之中,不过已经开始有厂家将其应用于产品中了。对于今天有兴趣在网络上部署Dart代码的任何人而言,Dart2js所生成代码的性能和体积都非常重要。

查看英文原文Dart2js Outperforms Hand-Written JavaScript in DeltaBlue Benchmark

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT