写点什么

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

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

关注

评论

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

十八般武艺玩转GaussDB(DWS)性能调优:总体调优策略

华为云开发者联盟

数据库 性能 调试

测试悄然扩围 千万元红包搅活数字货币江湖

CECBC

数字人民币

架构师第一期作业(第 6 周)

Cheer

本文将大数据学习门槛降到了地平线

MySQL从删库到跑路

大数据 hadoop hdfs mapreduce

LeetCode题解:78. 子集,迭代+位运算,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

架构师训练营 - 第二周课后练习

joshuamai

与其思考公司该为员工提供什么福利,不如思考有哪些 “福利” 不应该提供!

非著名程序员

个人成长 管理 福利

架构师训练营 - 第 6 周课后作业(1 期)

阿甘

DeFi流动性挖矿系统开发技术方案

薇電13242772558

区块链 defi

解惑“高深”的Kafka时间轮原理,原来也就这么回事!

华为云开发者联盟

中间件 消息队列

会展云技术解读丨多重安全保障护航云上会展

京东科技开发者

云计算 云服务 云平台

甲方日常 41

句子

工作 随笔杂谈 日常

Mac/Windows 连接 Ubuntu 的 samba 服务器

jiangling500

ubuntu Mac windows Samba

从实际案例聊聊Java应用的GC优化

AI乔治

Java 编程 架构 JVM GC

深度对比Apache CarbonData、Hudi和Open Delta三大开源数据湖方案

华为云开发者联盟

hadoop 开源 数据处理

如何获取变量token的值

测试人生路

软件测试 接口测试

Java程序员必须人手一本的《码出高效:Java 开发手册》,免费分享PDF文档

Java架构之路

Java 程序员 架构 面试 编程语言

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

joshuamai

Netty源码解析 -- 内存对齐类SizeClasses

binecy

Netty 内存管理

技术实践丨PostgreSQL开启Huge Page场景分析

华为云开发者联盟

数据库 管理 内存

刚从蚂蚁金服Java研发岗面试回来(三轮游),我总结的面试经历(附面试题+答案)

Java架构追梦

Java 架构 面试 蚂蚁金服

区块链是连接传统经济和数字经济的桥梁

CECBC

区块链 数字经济

【高并发】导致并发编程频繁出问题的“幕后黑手”

冰河

并发编程 多线程 高并发 高性能 异步

《Linux学习笔记》从常用命令、常用操作到网络管理、性能优化,无论是Java开发或是运维都可以学习!

Java架构之路

Java 程序员 架构 面试 编程语言

区块链将构建数字社会高效的全球网络

CECBC

数字经济 数字时代

面试官问我:看过sharding-jdbc的源码吗?我吧啦吧啦说了一通!!

冰河

分布式事务 微服务 分布式数据库 系统架构 中间件

工作5年的阿里Java程序员分享从业心得总结与面试笔记分享

Java架构师迁哥

JAVA稳定底层,快速开发首选,XJR智能化客户关系管理

Marilyn

敏捷开发 快速开发 软件架构 客户关系管理

问题篇:附源码询问Pageable实现分页无法使用原生sql

小Q

Java 学习 架构 面试 springboot

【JSRC小课堂】Web安全专题(三)SRC漏洞挖掘技巧:三步走收集高质量信息

京东科技开发者

WEB安全

架构师训练营 - 第 6、7、8、9、10 、11、12、13周学习总结(1 期)

阿甘

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