写点什么

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

  • 2014-10-19
  • 本文字数:967 字

    阅读完需:约 3 分钟

微软的 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

2014-10-19 13:081867
用户头像

发布了 256 篇内容, 共 77.1 次阅读, 收获喜欢 10 次。

关注

评论

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

dubbo-go 中使用 sentinel

apache/dubbo-go

dubbo sentinel Go 语言

JVM系列:通过一个例子分析JIT的汇编代码

简爱W

这16道Redis最常见面试问题,你能回答上来几个?

火羊哥

Java

谈谈敏捷中的那些模式

Bob Jiang

敏捷 敏捷开发 敏捷教练

刘华:事实证明,假敏捷都比瀑布优秀

刘华Kenneth

DevOps 敏捷 软件开发

无意中参加了infoQ的一期活动,获得了所有奖项,哈哈哈。。。

诸葛小猿

InfoQ 奖品

新生必备清单:不想成为虚度青春的“小透明”,手机应该怎样选?

脑极体

【面试必问】Spring中的事务管理详解

只喝纯牛奶

格一格你的情欲念

王进行

JVM详解之:类的加载链接和初始化

程序那些事

Java JVM GC 加载

别在网上乱找代码了,找了一段代码突然爆了!!!

导导

Java

架构师训练营第九周学习总结

张明森

小伙伴想写个 IDEA 插件么?这些 API 了解一下!

程序员小航

IDEA idea插件 教程 API IntelliJ IDEA

敏捷教练和Scrum Master - 敏捷转型中的两个重要角色的对比

Bob Jiang

Scrum 敏捷教练 ScrumMaster

架构师训练营第九周作业

张明森

Scrum Master是否需要懂技术

Bob Jiang

敏捷 敏捷开发 敏捷教练 ScrumMaster

最牛逼的Java框架,没有之一

我是苞谷

来了来了!Docker安装及运行原理

程序员的时光

Java Docker 微服务

今天你内卷了吗?

池建强

个人成长 内卷化

微碳系:我心中的宇宙

Geek_116789

F5G+X:给5G一个伙伴,给千行百业一个拥抱

脑极体

Dockerfile你值得拥有

北漂码农有话说

Docker

30岁的二三事

大唐小生

总结 个人感悟

nginx配置文件

张明森

LeetCode题解:70. 爬楼梯,递归+哈希表,JavaScript,详细注释

Lee Chen

大前端 LeetCode

JVM参数手册

Rayjun

JVM GC

搭乘政策红利“快车” 欧科云链助力区块链人才培养

CECBC

什么是算法的大O表示法

码农神说

算法 时间复杂度 Java算法 大O

金融行业区块链技术应用有了“安全符”

CECBC

“PlusToken”跨国网络传销案告破,涉案400亿元!

CECBC

RRedis系列(八):缓存到底该如何做到高可用?

z小赵

redis 分布式系统 高并发系统设计

微软JS引擎升级:引入二段式编译过程_JavaScript_David Iffland_InfoQ精选文章