写点什么

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

  • 2013-04-11
  • 本文字数:1481 字

    阅读完需:约 5 分钟

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

2013-04-11 09:252698
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 150.1 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

增量补丁交付模式下的高效审查策略:以GScloud为例

inBuilder低代码平台

软件开发 增量补丁 GScloud 云服务平台

别只调模型!RAG 检索优化真正该测的,是这三件事

测试人

企业级 AI 问数产品如何实现单轮问答?

察言观数 AskTable

智能问答 NL2SQL 智能问数 AI 问数 数据库 AI 分析

海外推广终极指南:2026年必须掌握的10大高回报渠道与策略

Wolink

跨境电商 海外社媒营销 海外营销推广 品牌出海 海外红人营销

别再让开发拖垮业务!低代码+AI三连击,效率翻倍

引迈信息

应用案例实践 | 基于“隐语SecretFlow”多方安全分析的智能化理赔

隐语SecretFlow

开源 数据分析 隐私计算 多方安全计算 多方安全分析

司马阅与宇见咨询达成生态战略合作,携手赋能企业增长

司马阅

启信宝获得法博会“行业洞见奖”,相关服务即将登陆“深律通”

合合技术团队

人工智能 大数据 算法

利用点击劫持漏洞触发XSS攻击:我是如何赚取350美元的

qife122

网络安全 xss攻击

打造智能通知中心:利用n8n的HTTP Request节点聚合多平台消息

测试人

Last Call | Siemens、Forrester、LTTS等全球行业专家在线分享数据科学与AI实战经验,点击报名!

Altair RapidMiner

人工智能 AI 数据科学

告别漫长GC停顿:深入解析G1如何实现可预测的毫秒级响应

poemyang

垃圾回收 Java虚拟机

数据采集故障频发,中控技术靠SeaTunnel实现日均TB级核心数据同步任务0出错

白鲸开源

大数据 开源 Meetup Apache SeaTunnel 中控技术

Proofpoint再次荣膺Gartner数字通信治理与归档解决方案领导者

qife122

人工智能 网络安全

国内首个!火山引擎推出融合国家级智库理论与大规模实战验证的 Data Agent 评测体系

科技新消息

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名自动化脚本项目需求洞察

qife122

AI编程 自动化脚本

前端新人最怕的“居中问题”,八种CSS实现居中的方法一次搞懂!

伤感汤姆布利柏

2026企业海外营销预算规划模板:如何科学分配市场费用?

Wolink

出海 海外社媒营销 海外营销推广 海外红人营销 品牌推广

极客时间PGSQL训练营毕业总结

李某人

极客时间 训练营 PgSQL

预算有限?中小企业海外推广的7个低成本破局之道

Wolink

跨境电商 品牌营销 海外社媒营销 海外营销推广 海外社媒推广

【基金行业】一体化运维自动化运维场景实践

嘉为蓝鲸

运维自动化 自动化运维 自动化巡检 IT巡检 国产自动化运维系统

MES系统在智能工厂中的应用

万界星空科技

制造业 智能工厂 mes 万界星空科技mes 智能制造数字化转型

2025 ChatBI 产品选型推荐:智能问数+归因分析+报告生成

Aloudata

数据分析 agent ChatBI 智能问数

专升本服务管理平台

深圳亥时科技

原型污染攻击工具揭秘:Prototype Pollution Gadgets Finder

qife122

漏洞挖掘 原型污染

基于时序数据库 IoTDB 实现成果 IoTDB-FS 荣获“挑战杯”擂主(全国第一名)

Apache IoTDB

DeltaBlue基准测试显示 Dart2js生成的JavaScript代码优于手写代码_JavaScript_Zef Hemel_InfoQ精选文章