写点什么

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

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

关注

评论

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

创意世界在 Photoshop 上运行~

真大的脸盆

Mac ps Mac 软件 Photoshop 2022下载

Go语言中如何通过接口来实现单一职责原则

Jack

2023-05-12:存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号, 给你一个数组 graph 表示这个图, 其中,graph[i] 是一个列表,由所有与节点 i

福大大架构师每日一题

Go 算法 rust

Django笔记二十六之数据库函数之数学公式函数

Hunter熊

Python 数据库 django 公式函数

利用 Amazon API Gateway 和 Amazon Lambda 处理 Cloudfront 的内容请求

亚马逊云科技 (Amazon Web Services)

程序员晋升指南!13年顶级架构设计经验的锦囊妙计与实践分享

Java你猿哥

Java 架构 ssm 架构设计 架构师

知乎文章被百度收录有何意义?如何让知乎文章被百度收录?

石头IT视角

Java补充之MySQL入门必备知识

timerring

Java

比起失业我更害怕自己“一无是处”|社区征文

轻口味

个人成长 移动端 三周年征文

系列课程:从零开始接触人工智能大模型(介绍)

茶桁

文心一言 VS chatgpt (16)-- 算法导论4.1 1~2题

福大大架构师每日一题

ChatGPT 文心一言

从 ChatGPT 大热看未来的云计算的发展趋势 | 社区征文

宇宙之一粟

ChatGPT 三周年征文

失业浪潮之下,不如一蓑烟雨任平生 | 社区征文

宇宙之一粟

如何优化Golang中重复的错误处理

乌龟哥哥

三周年连更

C++编译器和链接器的完全指南

小万哥

c++ 程序员 面试 后端 开发

一篇文章教你在业务开发中高效玩转TDD(测试驱动开发)

Java你猿哥

Java ssm TDD

23年最新Java岗常见面试题及答案(1000道),90% 的公司都会问到

Java你猿哥

Java MySQL zookeeper JVM java面试

PoseiSwap:合规、隐私与支持更广泛的资产

BlockChain先知

BitKeep逆势崛起:千万用户的信任,终点还未到来

鳄鱼视界

如何通过Logstash将MySQL数据同步到ElasticSearch

北桥苏

php MySQL elasticsearch Logstash

必知必会的JavaScript前端面试题篇(二),不看后悔!

Immerse

逆袭!阿里专家手码23版Java面试三件套,Github星标直线狂飙

Java你猿哥

Java 微服务 面经 算法题 java核心知识点

Kubernetes CNI之Flannel网络模型分析

王玉川

Kubernetes 云原生 flannel VXLAN cni

深入探秘OpenTelemetry Agent奇特的muzzle机制

骑牛上青山

Java Java Agent OpenTelemetry

使用Spring Boot接入ChatGPT

Java你猿哥

Java spring Spring Boot ssm ChatGPT

Github标星90K!不愧是阿里大牛珍藏的LeetCode题解全彩小册

Java你猿哥

面试 算法 LeetCode ssm 算法题

一文讲明白路由器的基本概念、工作原理、主要部件以及应用场景

wljslmz

路由器 三周年连更

奇葩的 Git 签名错误

HoneyMoose

【RabbitMQ】| 带你 (超详细) 从0到1使用SpringBoot操作RabbitMQ

Java你猿哥

Java spring Spring Boot ssm RabbitMQ

MySQL 安装配置

芯动大师

MySQL shell脚本 三周年连更

2023最新后端中大厂面经&在面试过程中如何反问?

Java你猿哥

Java ssm java面试 面试官 Java面经

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