最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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:252159
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

抖音关键词商品列表API:电商行业的成功之道及实时数据获取的魔力

Noah

关键词搜索淘宝商品列表数据接口|淘宝商品列表接口|淘宝API接口申请指南

tbapi

淘宝电商 淘宝API接口 淘宝商品列表数据接口 关键词搜索淘宝商品接口、

网易游戏与华为达成鸿蒙合作

最新动态

KaiwuDB 连续三年荣获开源中国“优秀开源技术团队”

KaiwuDB

KaiwuDB 优秀开源技术团队

小红书可观测 Metrics 架构演进,如何实现数十倍性能提升?

小红书技术REDtech

云原生 可观测性

诚邀报名 | 内核Hacker与Mogul邀您共论操作系统技术创新与发展

开放原子开源基金会

Java 开源 程序员 开发者 算法

义乌购商品详情数据接口|义乌购商品数据接口|义乌购API接口

tbapi

义乌购商品详情数据接口 义乌购数据接口 义乌API接口

关于响应式布局,你需要了解的知识点

EquatorCoco

响应式 页面布局 布局

前方高能!2023开放原子开发者大会亮点攻略,一触即发

开放原子开源基金会

Java 开源 程序员 开发者 算法

介绍一款低代码数据可视化平台

秃头小帅oi

低代码 数据可视化

5种容器内指定特定域名解析结果的方式

华为云开发者联盟

容器 云原生 华为云 域名解析 华为云开发者联盟

点燃数字引擎,天翼云助力汽车行业云上加速跑!

天翼云开发者社区

人工智能 数字化转型 汽车

数据中台的学习与总结 主赛道:技术人的 2023 总结

Echo_Wish

大数据 数据中台 年度总结 2023 2023年

闪闪发光的“她”· Ladies in Tech |相聚女性开发者论坛

开放原子开源基金会

Java 开源 程序员 开发者 算法

抖音商品详情API接口在电商行业中的重要性及实时数据获取实现

Noah

MySQL运维5-Mycat配置

EquatorCoco

MySQL 标签 配置化

低代码平台浅析:引迈JNPF

互联网工科生

低代码 JNPF 引迈

宣布推出适用于 Amazon DynamoDB 的增量导出到 S3

亚马逊云科技 (Amazon Web Services)

S3 API 云存储服务 Amazon DynamoDB

行业唯一!百度上榜“2023年度中国数据管理十大名牌企业”

百度安全

【嵌入式Qt开发入门】在Ubuntu下编写C++教程。

百度搜索:蓝易云

c++ Linux ubuntu 云服务器 qt

Nodejs项目yarn和node启动的区别

JavaScript node.js typescript YARN prisma

AI浪潮下,大模型如何在音视频领域运用与实践?

不在线第一只蜗牛

人工智能 AI 音视频 大模型

解放生产力!苏哒智能加入飞桨技术伙伴计划,用大模型革新企业办公工具

飞桨PaddlePaddle

人工智能 深度学习 办公 伙伴赋能

华为云CodeArts Deploy常见问答汇总

华为云PaaS服务小智

华为云

【教程】源代码加密、防泄密软件

雪奈椰子

技术写作者所需的关键技能和知识

小万哥

技术 程序人生 写作 软件开发 作者

华为云CodeArts Repo常见问答汇总

华为云PaaS服务小智

华为云

数字人克隆系统源码无限克隆数字人!

青否数字人

最佳 Mock 工具排行榜: 顶级5个必知选择

Liam

前端 前端开发 Mock Mock 服务 Mock.js

亮相CCF中国软件大会,天翼云助力千行百业搭上“数字快车”

天翼云开发者社区

人工智能 CCF

从信息量角度看人类智能与机器智能

Baihai IDP

人工智能 程序员 AI LLM 白海科技

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