QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

关注

评论

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

探讨Morest在RESTful API测试的行业实践

华为云开发者联盟

开发 API测试 华为云

高效!启科量子线路模拟器 QuSprout 与 Amazon HPC 集成,赋能量子计算

亚马逊云科技 (Amazon Web Services)

量子计算 Hero 专栏

企业网络“卫生”实用指南(上)

SEAL安全

网络安全 企业安全

公共大数据集群中如何配置 YARN 的公平调度器和容量调度器

明哥的IT随笔

hadoop YARN

技术指南 | 如何集成Perforce版本控制系统Helix Core (P4V) 与敏捷规划工具Hansoft

龙智—DevSecOps解决方案

敏捷 版本管理

深度 | 新兴软件研发范式崛起,云计算全面走向 Serverless 化

Serverless Devs

阿里云 Serverless

重构了一个服务的健康检查组件

Java永远的神

Java 程序员 面试 后端 架构师

Python 项目工程化最佳实践指南

Andy

Python 项目管理 代码规范 代码风格

Baklib|知识库应用场景:制作员工培训手册

Baklib

团队管理 知识管理

无情!阿里技术专家手写《微服务架构笔记》,瞬间屠榜NO.1

程序知音

Java 微服务 java架构 后端技术

Java中的StringBuilder类

共饮一杯无

Java StringBuilder 11月月更

MySQL数据库 group by 语句怎么优化?

Java全栈架构师

Java MySQL 数据库 程序员 后端

DNS中有哪些值得学习的优秀设计

小小怪下士

Java 程序员 DNS

异常的基本概念和Java中的体系

共饮一杯无

Java 异常 11月月更

降本增效的背后,谈谈阿里云存储数据湖3.0

云布道师

数据湖 云存储 云栖大会

FastJSON2他来了,性能显著提升,还能再战十年

共饮一杯无

Java Fastjson 11月月更

这可能是最全的SpringBoot3新版本变化了!

艾小仙

Java spring could spring-boot

FCOS论文复现:通用物体检测算法

华为云开发者联盟

人工智能 华为云 论文复现

MatrixOne从入门到实践07——MO-Tester

MatrixOrigin

数据库 分布式 测试工具 MatrixOrigin MatrixOne

软件测试自动化“领导者”SmartBear举办首场中国线上研讨会:洞悉全球自动化测试走向,探讨降本增效之策

龙智—DevSecOps解决方案

自动化测试 API测试 UI测试 软件测试自动化

vivo大数据日志采集Agent设计实践

vivo互联网技术

大数据 数据采集 日志采集 agent

面试官:介绍一下 Redis 三种集群模式

程序员小毕

redis 程序员 后端 java面试 redis集群

互联网大厂必问面试合集,助你跳槽拿高薪--Java篇

钟奕礼

Java java面试 java编程 程序员java

我与梅西粉丝们的世界杯观球日常

ZEGO即构

音视频开发

一种基于 Apache Hive 的元数据智能发现方案

移动云大数据

hive

千年荒漠变绿洲,看沙漠“卫士”携手昇腾AI植起绿色希望

华为云开发者联盟

人工智能 华为云 昇腾AI

Java中的拆箱与装箱

共饮一杯无

Java 11月月更 装箱与拆箱

String、StringBuffer、StringBuilder 有什么区别

共饮一杯无

Java string 11月月更

2022中国区Cyber Monday限时优惠来袭,Linux基金会开源软件学园带来优惠

kk-OSC

k8s Linux基金会 CKA CKS

ITSM | 对话——从业务场景、中国市场策略角度解读Atlassian ITSM解决方案

龙智—DevSecOps解决方案

ITSM ITIL

代码质量与安全 | 使用Incredibuild加速Klocwork静态代码分析

龙智—DevSecOps解决方案

代码静态分析 SAST工具 SAST 编译器 加速器 编程语言

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