【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

支持百万级TPS,Kafka是怎么做到的?

爱笑的架构师

kafka Kafka知识点 零拷贝 Mmap 七日更

生产环境全链路压测建设历程 19:某快递 A 股上市公司的生产压测案例之下篇

数列科技杨德华

全链路压测 七日更

90%的程序员,都没用过多线程和锁,怎么成为架构师?

小傅哥

程序员 小傅哥 线程池 架构师 七日更

TypeScript | 第四章:命名空间和模块

梁龙先森

typescript 大前端 七日更

花火交易所系统开发|花火交易所软件APP开发

系统开发

MySQL用户与权限管理指南

Simon

MySQL 用户权限 七日更

金瓯无缺江河一统|Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap

刘悦的技术博客

Python TCP ldap openldap 统一管理

区块链商品溯源解决方案,区块链全程追溯系统

13530558032

数字之暖:鹅厂云原生的“新路”与“历承”

脑极体

执子之手,与子长安:探秘华为运动健康实验室

脑极体

什么样的企业才需要用到云服务器?

德胜网络-阳

Docker终端无法输入中文问题解决

Simon

Docker 七日更

分布式缓存架构

raox

极客大学架构师训练营

函数进阶· 第3篇《常用内置函数filter()、map()、zip(),怎么用的呢?》

清菡软件测试

测试开发

永续合约交易系统开发模式定制

简析5G时代的MART流处理

VoltDB

数据库 5G

微警务平台搭建,智慧警务系统开发解决方案

t13823115967

智慧警务系统开发 微警务

第六周技术选型作业-CAP原理概述

Geek_michael

极客大学架构师训练营

合约交易系统开发软件定制

新思科技:2021年软件安全行业六大趋势预测

InfoQ_434670063458

云原生应用开发框架Quarkus介绍

gaolk

云原生 Quarkus

规划算法

田维常

算法

第五课技术选型作业

Geek_michael

极客大学架构师训练营

盘点2020 | 所思、所遇、所学、所悟

三钻

程序员 大前端 盘点2020

week5 conclusion 分布式缓存架构+消息队列

J

极客大学架构师训练营

便民服务多元化,智慧平安小区安防智能化建设

t13823115967

智慧城市

平安社区平台解决方案,智慧社区管理服务平台搭建

13530558032

【数据结构与算法】分析时间复杂度与空间复杂度

三钻

数据结构与算法

甲方日常 73

句子

工作 随笔杂谈 日常

甲方日常 74

句子

工作 随笔杂谈 日常

Javascript | 模拟mvc实现点餐程序

LiOnTalKING

Java mvc 大前端 H5

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