写点什么

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

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

关注

评论

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

Photoshop软件应用项目(二)

张立梵

设计师 ps 10月月更

跟着卷卷龙一起学Camera--DNG格式

卷卷龙

ISP camera 10月月更

如何快速对混合云环境进行安全合规检查

HummerCloud

云安全 上云合规 安全合规检测 10月月更

Dev-C++5.11安装教程

Yeats_Liao

后端 Java core 10月月更

树莓派4B安装64位Linux(不用显示器键盘鼠标)

程序员欣宸

树莓派 10月月更

PriorityQueue源码解析(一)

知识浅谈

Priority Queue 10月月更

跟着卷卷龙一起学Camera--双摄01

卷卷龙

ISP camera 10月月更

跟着卷卷龙一起学Camera--双摄02

卷卷龙

ISP camera 10月月更

从手动测试到自动化测试(下)

FunTester

IDEA SpringBoot SQL连接常见五大异常处理

Yeats_Liao

后端 Java core 10月月更

25分钟了解命令执行漏洞【例题+详细讲解】(二)

贤鱼很忙

sql 网络安全 10月月更

Spring Batch 事务限制

HoneyMoose

将系统划分为模块(微服务)的必要性

宇宙之一粟

微服务 系统设计 论文阅读 模块化 10月月更

SAP | 认识 abap 工作台(下)

暮春零贰

SAP abap 10月月更

Spring之核心容器

楠羽

笔记 SP【ring 10月月更

「Hive进阶篇」三、HQL底层执行过程及原理详解

大数据阶梯之路

大数据 hive 面试 数仓

什么是Scrum?Scrum的核心要点和精髓

laofo

Scrum 研发效能 敏捷研发

「CSS畅想」周期性事情怕忘,来看看一个月内都安排在哪天

叶一一

CSS JavaScript 前端 10月月更

大数据ELK(二十五):添加Elasticsearch数据源

Lansonli

elasticsearch 10月月更

Clickhouse:delete提交成功,数据还在

Ken

Clickhouse

还在为sql注入眼花缭乱的过滤而烦恼?一文教您快速找出所有过滤内容

贤鱼很忙

网络安全 SQL注入 10月月更

25分钟了解命令执行漏洞【例题+详细讲解】(一)

贤鱼很忙

网络安全 Web 10月月更

Zepoch节点单日内售罄,市场反响颇高

股市老人

Spring Batch 可以在一个 Step 中有多个 Tasklet 吗

HoneyMoose

「Hive进阶篇」四、HQL 高级巧用

大数据阶梯之路

大数据 hive 面试

Vue组件入门(五)props +

Augus

Vue3 10月月更

微信朋友圈架构图

Johnny

架构实战训练营9期

「CSS畅想」我的发呆专属,反复解锁手机屏幕

叶一一

CSS JavaScript 前端 10月月更

VS2019 添加bits/stdc++.h万能头文件库

Yeats_Liao

后端 Java core 10月月更

2022-10-14:以下go语言代码输出什么?A:0;B:7;C:9;D:不能编译。 package main import “fmt“ func main() { a := []int

福大大架构师每日一题

golang 福大大 选择题

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