博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DeltaBlue基准测试显示 Dart2js生成的JavaScript代码优于手写代码
阅读量:7237 次
发布时间:2019-06-29

本文共 1633 字,大约阅读时间需要 5 分钟。

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

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

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

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

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

新的Dart2js编译器本身就是用Dart实现的,为了收集变量和参数将使用类型的更多信息,它使用了一种名为“全局类型推导(global )” 的技术。因此可以生成更紧凑、更快速的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所生成代码的性能和体积都非常重要。

转载于:https://www.cnblogs.com/kuaidianba/archive/2013/04/12/3015839.html

你可能感兴趣的文章
JAVA笔记——序列化
查看>>
《数据科学:R语言实现》——3.1 引言
查看>>
协作软件的前景、进展以及阵痛
查看>>
PyTorch 和 TensorFlow 哪个更好?看一线开发者怎么说
查看>>
怎么善于发现seo网站优化的问题?
查看>>
《Metasploit渗透测试手册》—第8章8.1节介绍
查看>>
《UG NX8.0中文版完全自学手册》一1.4 工具栏的定制
查看>>
合三为一,Linux 基金会欲打造顶级开源峰会
查看>>
《计算机系统:系统架构与操作系统的高度集成》——2.8 编译函数调用
查看>>
Coda 2.5 发布,Mac 编辑器软件
查看>>
Vue.js —— 轻量级 JavaScript 框架(国人开发)
查看>>
《计算机科学导论》一2.1 引言
查看>>
《Linux KVM虚拟化架构实战指南》——2.2 安装配置RHEV虚拟化所需服务器
查看>>
《大型网站服务器容量规划》一3.3 其他容量规划方法
查看>>
《极客与团队》一第一章 天才程序员的传说
查看>>
《Python爬虫开发与项目实战》——3.2 HTTP请求的Python实现
查看>>
《IP路由协议疑难解析》一第1章 理解IP路由选择
查看>>
《Adobe Illustrator CS4中文版经典教程》—第1课 了解工作区
查看>>
《CCNP TSHOOT 300-135认证考试指南》——5.7节二层EtherChannel故障检测与排除
查看>>
阿里云大学认证体系发布
查看>>