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


    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所生成代码的性能和体积都非常重要。

  • 相关阅读:
    git使用教程2-更新github上代码
    git使用教程-本地代码上传到github
    【Mac系统 + Git】之上传项目代码到github上以及删除某个文件夹
    【Mac + Appium + Python3.6学习(五)】之常用的Android自动化测试API总结
    【Mac + Python + Selenium】之PyCharm配置Selenium自动化
    appium自动化常用API
    【Mac + Appium + Python3.6学习(四)】之常用的IOS自动化测试API总结
    ubuntu指令大全
    Win10上安装双系统(win10+ubuntu)
    C语言共用体的作用
  • 原文地址:https://www.cnblogs.com/kuaidianba/p/3015839.html
Copyright © 2020-2023  润新知