写点什么

微软 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:081757
用户头像

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

关注

评论

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

过等保选择云堡垒机还是硬件堡垒机比较好?

行云管家

网络安全 云服务 堡垒机 等级保护

Zookeeper(从7个方面来了解Zookeeper基础概念)

Java 程序员 后端

“抽象类”到底抽不抽象?实例对比一看便知!

Java 程序员 后端

《代码重构》之方法到底多长算“长”

Java 程序员 后端

《重学Java高并发》Disruptor使用实战

Java 程序员 后端

【Java 多线程 1】CountDownLatch

Java 程序员 后端

营口市广东商会成立

江湖老铁

全面通透深入剖析工厂方法模式

Tom弹架构

Java 架构 设计模式

《吃透MQ系列》核心基础全在这里了,一文啃透!

Java 程序员 后端

【C 语言小游戏】手打贪吃蛇1

Java 程序员 后端

【Java每日面试题】大厂是如何设计秒杀系统的?

Java 程序员 后端

公有云是什么意思?其存在的意义是什么?

行云管家

云计算 公有云 私有云 混合云

【Java知识点详解 7】装箱和拆箱

Java 程序员 后端

YGC问题排查,又让我涨姿势了!

Java 程序员 后端

ZooKeeper分布式配置——看这篇就够了

Java 程序员 后端

[译] 微服务的设计模式

Java 程序员 后端

《Spring实战》读书笔记-第4章 面向切面的Spring

Java 程序员 后端

【Java 集合框架】Stack、Queue 和 Deque 的使用

Java 程序员 后端

《Spring实战》读书笔记-第4章 面向切面的Spring(1)

Java 程序员 后端

「并发原理专题」AQS的技术体系之CLH、MCS锁的原理及实现

Java 程序员 后端

【Java从0到架构师】SQL 多表查询

Java 程序员 后端

WPF学习——依赖项属性(2)(1)

Java 程序员 后端

《菜菜的机器学习sklearn课堂》降维算法PCA和SVD

Java 程序员 后端

ZK(ZooKeeper)分布式锁实现

Java 程序员 后端

《JVM系列》 第六章 -- 对象的实例化与内存布局

Java 程序员 后端

《JVM系列》 第六章 -- 对象的实例化与内存布局(1)

Java 程序员 后端

WPF学习——依赖项属性(2)

Java 程序员 后端

架构实战营-模块三作业

随风King

「架构实战营」

【Java 基础语法】万字解析 Java 的多态、抽象类和接口

Java 程序员 后端

【Java从0到架构师】Maven

Java 程序员 后端

【Java核心面试宝典】Day3、图解HashMap高频面试及底层实现架构!

Java 程序员 后端

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