BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

微软JS引擎升级:引入二段式编译过程

| 作者 David Iffland 关注 4 他的粉丝 ,译者 李彬 关注 1 他的粉丝 发布于 2014年10月20日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

微软的Internet Explorer团队最近详细介绍了即将在Windows 10中出现的JavaScript引擎所引入的变化。其中一个意义深远的变化是,在JIT(Just-in-Time)编译器中增加了一个新的阶段。

JS引擎Chakra最早出现在IE9中,为Internet Explorer以及从微软应用商店中下载的基于Web的应用提供服务。当运行JavaScript中函数时,Chakra首先使用解析器,以缓慢但灵活的方式解释执行。而一旦当某个函数或循环变得“炙手可热”,Chakra便将使用其JIT编译器来生成经过优化的机器代码。

在Windows 10中,Chakra将增加第二个JIT编译器,它将填补缓慢的、解释执行的代码,与快速、经过优化的代码之间的鸿沟。这个新增的中段编译器被称为Simple JIT(简化的JIT),它将作为一个“足够好”的中间层,能够比Full JIT(完整的JIT)更快速地将代码执行从解析器中移出。微软宣称这一变化将令特定的工作负载“运行速度提升最多30%”。

这个Simple JIT将不会采用复杂的优化生成代码。在大部分情况下,Simple JIT编译代码所化的时间,将远小于Full JIT编译器生成高度优化的JIT代码所需的时间。

除微软外,其他一些浏览器早已完成了转向两段式JIT编译器架构的过程。Firefox的JS引擎SpiderMonkey拥有一个解析器和两个编译器,名为Baseline和IonMonkey。Baseline编译器最初现身于Firefox 23,负责与Chakra中的Simple JIT编译器类似的中间步骤。而在Google Chrome浏览器的V8 JS引擎早在2010年就已经公布了它的两段式编译系统,不过V8并未引入解析器。

除了引入新的JIT编译器外,Chakra现在还将把代码编译工作划分给若干后台线程。而在此之前,它只有一个后台线程。

现在,一旦发现自身运行的环境中,硬件的性能可能未被充分利用,Chakra就能够为JIT编译开启若干并发的后台线程。与之相对照的,V8引擎目前在单一一条后台线程上编译

受Web天生条件制约,JavaScript代码无法提前编译;因此,编译过程必须发生在客户侧。Firefox的第一个版本提供了一套JS原生代码JIT编译器(3.1版);Internet Explorer在IE9中才引入该特性;而V8则在问世之日起就采用这样的JIT编译器。

微软目前将全新Internet Explorer作为Windows 10技术预览版中的一部分对外发布。

查看英文原文:Microsoft's JavaScript Engine Learns New Tricks For Windows 10

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT