写点什么

Mozilla 下一代 JavaScript 引擎为 RIA 提供接近 C 语言的性能

  • 2008-08-04
  • 本文字数:1931 字

    阅读完需:约 6 分钟

Andreas Gal 讲述了 TraceMonkey 的基准参数:

TraceMonkey 是一个基于跟踪的即时编译器,对 JavaScitps 性能有大幅度的提高。平均来讲,按照苹果公司流行的 SunSpider 基准,新版本 Firefox 性能超过上一个版本 4.6 倍。总的运行性能比 SunSpider 基准提高了 1.83 倍(SunSpider 的某些测试,例如正则表达式引擎不在即时编译范围内,因此整体性能提高不是很多)。对于 SunSpider 中专注于核心 JavaScript 语言引擎的 ubench 基准,我们提高了 22 倍。无论你采用何种方式度量,Firefox 目前都拥有世界上最快的 JavaScript 引擎。

我们的即时编译器产生的代码性能接近于未优化的 C 语言代码(gcc -O0)。

同时,他也解释了跟踪机制是如何起作用的

传统的即时编译器(例如 Sun 的 Hotspot 虚拟机)在设计和结构上非常类似于静态编译器(例如 GCC)。这种编译器会监控程序中哪些方法执行比较频繁,一旦达到某个阈值就把这些方法翻译成原生机器代码。虽然这些方法通常包含了影响关键性能的代码(例如循环),但是它们经常也会包含“慢腾腾”的路径和非循环代码,而这些对方法的运行性能几乎没有任何影响。但是,这样一个针对完整方法(while method)的编译器不得不分析和编译整个方法,即使该方法的某些部分不值得去“特别照顾”。基于跟踪的编译器则采用一种完全不用的方式。我们通过虚拟机监控字节码的解释过程,同时扫描频繁调用的向后(backwards)分支,这些分支在程序中意味着循环。一旦我们确定了循环的起始点,我们跟着解释器执行程序并记录字节码指令的顺序。因为我们记录了循环的起始点,解释器一旦执行完一次循环最终会返回起始点。这个被记录下的线性指令顺序我们称之为跟踪。 跟踪代表了循环的单次执行,可以跨方法和程序模块。如果在循环中调用一个函数,我们会展开这个函数调用,把函数的代码内嵌到循环中。这样函数调用就不再需要记录了。我们只是在运行时确认调用该函数的条件是否成立即可。

Mike Shaver也提到了针对 Firefox JavaScript Engine 所作的工作

在过去的一年中,JavaScrip 在 Web 上的性能得到了显著的提高。几乎每一个浏览器都在改善它们的引擎以获得执行速度上的提高。比如,Firefox 3 比 Firefox 2 在各种测试基准上都快大约 3 倍。当然,开发人员和用户对性能的需求是无止境的,为 Mozilla 工作时,我们自己也有性能需求,因为我们在很大程度上是用 JavaScript 写程序。除了提高 Web 应用的性能,我们针对 TraceMonkey 所作的工作也让我们自己的程序更快更灵活。

Brendan Eich在博客里提到了这些性能提升的意义

抛开细节,这里列举一些重点:- 目前,TraceMonkey 支持 x86、x86-64 和 ARM。这意味着我们已经为移动和桌面平台做好了准备。

  • 随着性能持续提高,人们会把“很慢”的代码转化成 JavaScript 在浏览器中运行。这意味着 Web 未来能够承受那些现在需要配置专有插件才能完成的运行压力。

  • 随着跟踪更多 DOM 和其他原生代码,我们提高了代码的内存安全水平,保证不会含有能够被利用的 bug。

  • 跟踪机制只关注关键路径,建立跟踪树缓存。非关键代码绝不会被跟踪或即时编译,避免完整方法编译器带来的内存膨胀。跟踪机制很灵活。

  • JS 驱动的 JS 驱动的显示,包括工具包、图片、游戏逻辑等等,都在 JS 中实现,将是未来的趋势。

TraceMonkey 让我们向 Mozilla 2 更进一步,更多的代码由 JS 写成。Firefox 随着这些发展会变得更快和更安全。

John Resig也谈到了这些显著的进步对 JavaScript 语言和 RIA 未来的意义

那么,TraceMonkey 对我们到底意味着什么?它意味着 JavaScript 不在受之前处理能力的限制。凭借 TraceMonkey,它已经有了巨大的飞跃,可以与强大的计算语言(如 c 语言)媲美。 我非常希望看到更多和更大的项目采用 JavaScript 语言。关注性能的项目也能够如偿所愿,例如涉及大量数字计算方面(如图片处理)或者大量对象方面(如关系对象结构)的应用。 我特别激动的一点是与 Cavans 的关系。阻挡 Canvas 开发的主要障碍不再是显示—而是语言的处理能力限制(执行与矢量、矩阵或碰撞检测有关的数据运算)。我希望这个问题在 Firefox 3.1 发布后能够解决。 能够看到 TraceMonkey 即将发布让我非常兴奋。JavaScript 绝对是那种能够不断发现缺点却持续取得进步的“小”语言。我希望在未来的许多年中一直使用它。

如果你想亲自尝试一下 TraceMonkey,你可以下载 Firefox 3.1 每日构建版,打开 about:config,设置 javascript.options.jit.content 属性为 true。虽然还没完成而且存在 bug,John Resig 宣称每日构建版本足可以应付大多数网站。如果您想了解更多有关富互联应用的新闻和文章,可以访问: http://www.infoq.com/ria

查看英文原文: Near C Performance for RIAs with Next Generation Mozilla JavaScript Engine

2008-08-04 09:36967
用户头像

发布了 501 篇内容, 共 238.5 次阅读, 收获喜欢 55 次。

关注

评论

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

自媒体团队会面临哪些瓶颈和困境

石头IT视角

现成交易所系统软件开发案例

iOS 布道者龙神:永远挑战难度值增加 30% 的事情

融云 RongCloud

CTF专题一2021网络WEB题目解析

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

北京天源迪科携迪易采参加“第五届中央企业电商化采购发展高峰论坛”

科技热闻

百度吴甜:首席AI架构师培养计划持续为行业输送高端复合型AI人才

百度大脑

人工智能 百度

WICC 话题剧透|Beeto 陈昊:中东爆款社交平台是怎样炼成的

融云 RongCloud

从语聊房 SDK 的诞生,看 PaaS 服务的演进过程

融云 RongCloud

官方线索|脉脉1024程序员嘉年华

穿过生命散发芬芳

1024我在现场

Android技术分享| 超简单,给 Android WebRTC增加美颜滤镜功能

anyRTC开发者

android 音视频 WebRTC 移动开发 美颜滤镜

字节跳动技术官珍藏版:MySQL王者进阶手册!面面俱到,太全面了

Java MySQL 数据库 面试 后端

区块链交易所系统开发方案(案例)

区块链数字货币交易所系统软件开发详情(源码)

SQL实现连续登陆人数天数统计

大象灵感

sql 大数据 hive 数据仓库 数据分析

Kubernetes Service Proxy 无秘密

绅鱼片

Kubernetes 网络 iptables k8s网络 kube-proxy

博鳌科创论坛第二届大会区块链分论坛预告

Geek_6e23d8

区块链 博鳌亚洲论坛

区块链交易所系统软件开发资料(源码)

语聊房 SDK,下一代场景化解决方案新范式

融云 RongCloud

Linux下进程崩溃定位

正向成长

OOM崩溃

Bazel与Gradle构建工具差异对比

轻口味

android 构建工具 10月月更

架构实战营-模块一作业

御道而行

架构实战营

Java自定义异步功能实践

FunTester

Java 线程池 接口测试 异步 FunTester

【服务器】服务器租用后如何高效管理,不出纰漏?

行云管家

服务器 IT运维 运维管理 服务器租用

Flink Could not find any factory for identifier 'XXX' 排查过程

大可大大大

Transformer模型在语音识别领域最新进展,百度语音发布重大技术突破SMLTA2

科技热闻

/var/lib/docker目录磁盘满了,更换默认目录

阿呆

优化技术专题-性能优化系列-针对Java对象压缩及序列化技术的探索之路

洛神灬殇

序列化协议 序列化机制 10月月更

2021云栖大会 | 传统行业如何上链?旺链科技与你面对面畅聊!

旺链科技

区块链 云栖大会

常州一家等保测评公司在哪里?联系电话多少?

行云管家

网络安全 堡垒机 等级保护 等保测评 过等保

如何选购四屏或多屏炒股电脑主板?

双赞工控

主板定制

NB!阿里首次公布Java10W字面经,Github访问量破百万

Java 程序员 架构 面试 计算机

Mozilla下一代JavaScript引擎为RIA提供接近C语言的性能_Java_Dio Synodinos_InfoQ精选文章