JavaScript引擎是一个专门
处理JavaScript
脚本的虚拟机,一般会附带在
网页浏览器之中。
历史发展
在2008年到2009年的第二次
浏览器大战之前,JavaScript引擎(JavaScript engine)仅简单地被当作能阅读执行JavaScript
源代码的解释器。
第一款JavaScript引擎由布兰登·艾克在
网景公司开发,用于
Netscape Navigator
网页浏览器中。引擎的名字叫做
SpiderMonkey,由C实现。它自
JavaScript 1.5升级以符合ECMA-262 版本3。Rhino引擎,由网景公司的Norris Boyd开发,由
Java实现。像SpiderMonkey一样,Rhino
符合ECMA-262 版本3。JavaScript引擎的应用例子还包括: Apple
Safari4的Nitro,
Chrome浏览器的V8和
Mozilla Firefox 3.5的
TraceMonkey。
最通用的JavaScript宿主环境是网页浏览器。网页浏览器一般使用公共的API创建“宿主对象”以便于在JavaScript中支持DOM。
网页服务器是另一种通过的应用程序引擎。一个JavaScript服务器能够处理
HTTP请求并回应,这样JavaScript程序能动态生成页面。微软用于IIS中
ASP技术允许服务器端代码以VB Script或
JScript(微软的JavaScript实现)写成。Jaxer是以JavaScript编写成的网页服务器,这有利于在服务器端和客户端使用同样的代码。
引擎应用
Mozilla
SpiderMonkey,第一款JavaScript
引擎,由Brendan Eich在Netscape Communications时编写,用于Mozilla Firefox 1.0~3.0版本。
TraceMonkey,基于实时编译的引擎,其中部份代码取自Tamarin引擎,用于Mozilla Firefox 3.5~3.6版本。
JaegerMonkey,德文Jäger原意为猎人,结合追踪和组合码技术大幅提高性能,部分技术借凿了
V8、JavaScriptCore、
WebKit,用于Mozilla Firefox 4.0以上版本。
Google
V8,
开放源代码,由
Google丹麦开发,是Chrome浏览器的一部分。
微软
Chakra (
JScript引擎),中文译名为查克拉,用于Internet Explorer 9的32位版本。
Opera
Linear A,用于Opera 4.0~6.1版本。
Linear B,用于Opera 7.0~9.2版本。
Futhark,用于Opera 9.5~10.2版本。
Carakan,由
Opera软件公司编写,自Opera10.50版本开始使用。
其它
KJS,
KDE的
ECMAScript/JavaScript引擎,最初由Harri Porten开发,用于KDE项目的
Konqueror网页浏览器中。
Narcissus,开放源代码,由Brendan Eich编写(他也参与编写了第一个
SpiderMonkey)。
Tamarin,由Adobe Labs编写,Flash Player 9所使用的引擎。
Nitro(原名SquirrelFish),为Safari 4编写。
性能演化
2008年5月11日,
Mozilla采用PGO(Profile-guided Optimizations)特性指引优化,使Firefox 3.0的性能大幅提升。2009年6月30日发布的Firefox 3.5使用了Tracing和Nanojit技术,能“在某些情况下的速度提升20到40倍”,其中Nanojit的代码由Adobe贡献。
2008年6月2日,
WebKit开发团队声明了SquirrelFish——一个新的JavaScript引擎能极大地提升
Safari解释脚本的速度。该引擎是Safari 4其中一个新特性,在2008年6月11日发布给
程序员使用;最终此JavaScript引擎被称为Nitro。
在浏览器开发者之间展开了一场开发更快的JavaScript引擎的竞赛。2008年,Chrome浏览器因它的JavaScript性能而被受称赞,但是其它浏览器马上使用了更快的JavaScript引擎。之后,Chrome浏览器在性能上获得领先,其长处在于它高速的性能和JavaScript的处理速度,这些都由许多网站在主要的浏览器之间的速度测试中得到验证。随着
WebKit的Squirrelfish Extreme和
Mozilla的TraceMonkey JavaScript
虚拟机 出现,
Chrome的JavaScript执行速度就被超越了。Google丹麦在Chrome 2中开发了更快速的V8引擎。
一个典型的浏览器有一个图形引擎和一个独立的JavaScript引擎。这样JavaScript引擎能够被更方便的测试、重新生成或者在另一些项目中使用。例如
Carakan被用在Presto中,Nitro被用在WebKit中,
SpiderMonkey被用在
Gecko中,KJS被用在
KHTML中,Rhino默认不包含任何布局引擎。但还有其他组合,例如V8与
WebKit被用于Chrome浏览器中。JavaScript引擎能为
程序员提供部分操作浏览器的功能(网络、DOM、外部事件、HTML5视频、canvas和存储)。
Sunspider是一个JavaScript实用
基准测试通过一系列关于JavaScript语言的脚本测试JavaScript引擎的速度。Sunspider不测试无关于JavaScript的特性(不使用HTML、CSS和无网络情况下)。
实现
参见:
ECMAScript引擎列表 JavaScript是一种ECMAScript方言,在许多程序中得以实现,特别是在网页浏览器。这些方言通常扩展了语言,或者标准库和相关API,例如W3C定义的DOM。这意味着以一种方言实现的程序不兼容于另一种方言的实现,除非程序使用了方言中的公共子集所具有的特性和API。
在实现和方言中存在着一些差别。一种语言的方言有一些与语言不同的地方。实现能够执行该语言或方言编写的程序。