写点什么

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

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

关注

评论

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

关于整理东西这件事「Day 8」

道伟

28天写作

产品经理训练营 - 作业五

胡小湖

论文阅读:通过动态预测/完备在稀疏知识图谱上进行多跳推理

Alocasia

自然语言处理 深度学习 nlp 强化学习

Elasticsearch Doc Values 和 doc_values

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

状态图与概念模型

克比

你存在我深深的脑海里——兼谈间隔效应

Justin

心理学 28天写作 游戏设计

从一次洗头发的经历,学习一家公司的成长

数列科技杨德华

28天写作

模型评估指标-1-基础篇-FPR/TPR/F1/ROC/AUC

一直学习一直爽

机器学习 模型评估 分类模型 一直学习一直爽

c++基本语法详解

张鹤羽

28天写作 3月日更

一文搞懂Cookie、Storage、IndexedDB

执鸢者

大前端 Cookie indexedDB storage

最值得阅读的数据仓库书籍推荐

白贺BaiHe

大数据 数据仓库 推荐书籍 数仓 构建模型

Linux之旅 - 入⻔命令集 - 文件管理(1/2)

诚义舅

bash Linux Shell linux命令

使用 Helm 部署 Wikijs

东风微鸣

k8s openshift wiki

(28DW-S8-Day8) 区块链之瞎扯淡

mtfelix

区块链 28天写作

翻译:《实用的Python编程》03_00_Overview

codists

Python

必学必会-音频和视频

我是哪吒

html5 大前端 28天写作 2月春节不断更

第五周作业-第四章作业(二)

Geek_72d5ab

谈学习

Ryan Zheng

学习方法

javascript中的模块系统

程序那些事

JavaScript 程序那些事 模块系统

第五次作业

秦挺

Linux入门篇 —— 一文带你彻底搞懂Linux 文件权限管理

若尘

Linux 权限 linux 文件权限控制

LeetCode题解:122. 买卖股票的最佳时机 II,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

程序员成长第十六篇:代码重构

石云升

程序员 28天写作 2月春节不断更

易语言使用与研究

慕容

易语言

我眼中的IT售前工作

Geek_dn82ci

云计算 职场 解决方案 售前

现在写还来得及吗?

Nydia

消灭微服务的坏味道 之 共享库

码猿外

微服务 共享库

如何节省数据库写操作资源(6)【写缓存】

我爱娃哈哈😍

数据库 缓存 架构设计 抢购思路 写缓存

【LeetCode】至少有K个重复字符的最长子串Java题解

Albert

算法 LeetCode 28天写作 2月春节不断更

【死磕JVM】五年 整整五年了 该知道JVM加载机制了!

牧小农

JVM 类加载 类加载器 类加载时机 双亲委派

第四章作业(二)

墨狂之逸才

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