JavaScript引擎

JavaScript引擎是一个专门处理JavaScript脚本的虚拟机,一般会附带在网页浏览器之中。

历史

在2008年到2009年的第二次浏览器大战之前,JavaScript引擎仅简单地被当作能阅读执行JavaScript源代码直譯器

  • SpiderMonkey:第一個JavaScript引擎,由布蘭登·艾克网景公司开发,用于Netscape Navigator网页浏览器中,由C++实现。自JavaScript 1.5升级以符合ECMA-262版本3。
  • Rhino:由网景公司的諾里斯·博伊德(Norris Boyd)开发,由Java实现。像SpiderMonkey一样,Rhino符合ECMA-262版本3。
  • Nitro:Apple Safari 4開始支援
  • V8:Google Chrome製作
  • TraceMonkey:Mozilla Firefox 3.5開始支援

目前为止,最通用的JavaScript宿主环境是网页浏览器。网页浏览器一般使用公共的API创建“宿主对象”以便于在JavaScript中支持DOM

性能演進

一个典型的浏览器有一个图形引擎和一个独立的JavaScript引擎。这样JavaScript引擎能够被更方便的测试、重新生成或者在另一些项目中使用。例如:Carakan被用在Presto中,Nitro被用在WebKit中,SpiderMonkey被用在Gecko中,KJS被用在KHTML中,Rhino默认不包含任何布局引擎。但还有其他组合,例如:V8与WebKit被用于Google Chrome中。JavaScript引擎能为程序员提供部分操作浏览器的功能(网络、DOM、外部事件、HTML5视频、canvas和存储)。

Sunspider是一个JavaScript实用基准测试英语Browser speed test通过一系列关于JavaScript语言的脚本测试JavaScript引擎的速度。Sunspider不测试无关于JavaScript的特性(不使用HTML、CSS和无网络情况下)。

近幾年來,在浏览器开发者之间展开了一场开发更快的JavaScript引擎的竞赛。2008年,Google Chrome因它的JavaScript性能而倍受称赞,但是其它浏览器马上使用了更快的JavaScript引擎。之后,Google Chrome在性能上获得领先,其长处在于它高速的性能和JavaScript的处理速度,这些都由许多网站在主要的浏览器之间的速度测试中得到验证[1][2][3]。随着WebKit的Squirrelfish Extreme和Mozilla的TraceMonkey JavaScript虚拟机出现,Chrome的JavaScript执行速度就被超越了[4][5][6][7]。Google丹麦在Chrome 2中开发了更快速的V8引擎。

2008年6月2日,WebKit开发团队发布了SquirrelFish[8]——一个能极大地提升Safari解释脚本速度的新的JavaScript引擎[9]。该引擎是Safari 4其中一个新特性,在2008年6月11日发布给程序员使用;最终此JavaScript引擎被称为Nitro。2009年6月30日,在Firefox 3.5發布的最新技術能“使某些情況下的速度提升20到40倍”[10]

著名的引擎

開發中

  • Rhino,由Mozilla基金会管理,开放源代码,完全以Java编写。
  • SpiderMonkey,第一款JavaScript引擎,早期用於Netscape Navigator,現時用於Mozilla Firefox
  • V8,开放源代码,由Google丹麦开发,是Google Chrome的一部分。
  • JavaScriptCore,开放源代码,用於Safari
  • Chakra (JScript引擎),用於Internet Explorer[11]
  • Chakra (JavaScript引擎),用於Microsoft Edge
  • KJS,KDE的ECMAScript/JavaScript引擎,最初由哈里·波頓英语Harri Porten开发,用于KDE项目的Konqueror网页浏览器中。

停止開發

  • Linear A,用于Opera 4.0至6.1版本。
  • Linear B,用于Opera 7.0至9.2版本。
  • Futhark,用于Opera 9.5至10.2版本。
  • Carakan,用于Opera 10.5至12.1版本。
  • Nashorn英语Nashorn,Oracle於JDK 1.8[12][13][14]發布,內嵌於 Java 的 javascript 引擎。於Java 11改為棄用[15]並於Java 15[16]正式移除。
  • Narcissus英语Narcissus (JavaScript engine),开放源代码,由布蘭登·艾克编写(他也编写了SpiderMonkey)。
  • Tamarin,由Adobe Labs编写。

实现

JavaScript是一种ECMAScript方言,在许多程序中得以实现,特别是在网页浏览器。这些方言通常扩展了语言,或者标准库和相关API,例如W3C定义的DOM。这意味着以一种方言实现的程序不兼容于另一种方言的实现,除非程序使用了方言中的公共子集所具有的特性和API。

在实现和方言中存在着一些差别。一种语言的方言有一些与语言不同的地方。实现能够执行该语言或方言编写的程序。

应用程序(实现) 方言和最后版本 ECMAScript版本
Google Chrome,V8引擎 JavaScript ECMA-262,版本6
Mozilla FirefoxGecko排版引擎,SpiderMonkey和Rhino JavaScript 1.8.5 ECMA-262,版本6
SafariNitro引擎 JavaScript ECMA-262,版本6
Microsoft Edge,Chakra引擎 JavaScript EMCA-262,版本6
Opera,Carakan引擎(改用V8之前) 一些JavaScript 1.5特性及一些JScript扩展[17] ECMA-262,版本5.1
KHTML排版引擎,KDE项目的Konqueror JavaScript 1.5 ECMA-262,版本3
Adobe Acrobat JavaScript 1.5 ECMA-262,版本3
OpenLaszlo英语OpenLaszlo JavaScript 1.4 ECMA-262,版本3
Max/MSP英语Max (software) JavaScript 1.5 ECMA-262,版本3
ANT Galio 3英语Fresco (web browser) JavaScript 1.5附带RMAI扩展 ECMA-262,版本3

参考来源

  1. ^ Stephen Shankland. Speed test: Google Chrome beats Firefox, IE, Safari. cnet.com Business Tech. CNET. 2008-09-02 [2010-06-28]. (原始内容存档于2012-05-01) (英语). 
  2. ^ Big browser comparison test: Internet Explorer vs. Firefox, Opera, Safari and Chrome. PC Games Hardware. Computec Media AG. [2010-06-28]. (原始内容存档于2012-05-01) (英语). 
  3. ^ Lifehacker Speed Tests: Safari 4, Chrome 2. Lifehacker. [2010-06-28]. (原始内容存档于2012-05-01) (英语). 
  4. ^ Stephen Shankland. Third Chrome beta another notch faster. cnet.com. CNET. 2008-10-31 [2010-06-28]. (原始内容存档于2012-09-25) (英语). 
  5. ^ Stephen Shankland. Step aside, Chrome, for Squirrelfish Extreme. cnet.com. CNET. 2008-09-19 [2010-06-29]. (原始内容存档于2012-09-25) (英语). 
  6. ^ SquirrelFish Extreme: Fastest JavaScript Engine Yet. satine.org. [2010-06-29]. (原始内容存档于2012-05-01) (英语). 
  7. ^ Stephen Shankland. Firefox counters Google's browser speed test. cnet.com Business Tech. CNET. 2008-09-03 [2010-06-29]. (原始内容存档于2012-05-01) (英语). 
  8. ^ Garen, Geoffrey. Announcing SquirrelFish. 2008-06-02 [2008-06-11]. (原始内容存档于2012-05-01) (英语). 
  9. ^ Lipskas, Vygantas. Apple Safari 4. 2008-06-11 [2008-06-11]. (原始内容存档于2012-05-01) (英语). 
  10. ^ Ryan Paul. Firefox to get massive JavaScript performance boost. arstechnica.com. Ars Technica © 2010 Condé Nast Digital. 2008-08-22 [2010-06-28]. (原始内容存档于2008-12-17) (英语). 
  11. ^ Marius Oiaga. Internet Explorer 9 Beta Next – New IE9 Builds Every 8 Weeks. softpedia.com. SoftNews NET SRL. 2010-03-20 [2010-06-28]. (原始内容存档于2012-05-01) (英语). 
  12. ^ Laskey, James. Adventures in JSR-292 or How To Be A Duck Without Really Trying (PDF). Oracle Corporation. July 2011 [2011-07-24]. (原始内容 (PDF)存档于2016-06-03). 
  13. ^ Proposed new schedule for Java 8. 2013-04-18 [2013-04-19]. (原始内容存档于2013-04-22). 
  14. ^ JDK 8. OpenJDK. 2013-04-18 [2013-04-19]. (原始内容存档于2013-09-07). 
  15. ^ JEP 335: Deprecate the Nashorn JavaScript Engine. 2017-07-17 [2018-09-25]. (原始内容存档于2022-05-23). 
  16. ^ JEP 372: Remove the Nashorn JavaScript Engine. 2020-01-10 [2020-07-22]. (原始内容存档于2022-06-09). 
  17. ^ Web specifications support in Opera Presto. Opera.com. Opera Software ASA. [2010-06-28]. (原始内容存档于2012-06-04) (英语). 

外部链接

  • Kraken JavaScript Benchmark (页面存档备份,存于互联网档案馆) - 瀏覽器效能測試
  • Peacekeeper (页面存档备份,存于互联网档案馆) - 瀏覽器效能測試
  • Speed-Battle (页面存档备份,存于互联网档案馆) - 瀏覽器效能測試
  • SunSpide (页面存档备份,存于互联网档案馆) - 瀏覽器效能測試
语言
引擎列表
引擎比较
框架
客户端
  • Ample SDK英语Ample SDK
  • Chaplin.js英语Chaplin.js
  • Dojo
  • Echo
  • Extjs
  • Google網頁工具包
  • JQuery
  • Lively Kernel英语Lively Kernel
  • midori英语Midori JavaScript Framework
  • MochiKit英语MochiKit
  • MooTools英语MooTools
  • Prototype
  • Pyjs英语Pyjs
  • qooxdoo英语qooxdoo
  • Rialto英语Rialto Toolkit
  • Rico
  • script.aculo.us英语script.aculo.us
  • SmartClient英语SmartClient
  • SproutCore英语SproutCore
  • Spry英语Spry framework
  • Wakanda框架英语Wakanda (software)
  • 雅虎UI库
服务器
  • AppJet英语AppJet
  • Jaxer英语Jaxer#Aptana Jaxer
  • Node.js
  • Deno
  • WakandaDB英语Wakanda (software)
多種實作
  • Cappuccino英语Cappuccino (application development framework)
    • Objective-J英语Objective-J
  • PureMVC英语PureMVC
函式庫
  • Backbone.js
  • SWFObject英语SWFObject
  • SWFAddress英语SWFAddress
  • Lodash
人物
其他
  • DHTML
  • Ecma国际
  • JSDoc英语JSDoc
  • JSGI英语JSGI
  • JSHint
  • JSLint
  • JSON
  • JSSS英语JavaScript Style Sheets
  • Sputnik英语Sputnik (JavaScript conformance test)
  • SunSpider英语Browser speed test#SunSpider
  • 异步模块定义英语Asynchronous module definition
  • CommonJS
列表级条目列表
JavaScript库列表
Ajax框架英语list of Ajax frameworks#JavaScript
列表级条目比较
JavaScript框架英语Comparison of JavaScript frameworks
服务器端JavaScript英语comparison of server-side JavaScript solutions
代码分析
編譯器
概念
调试工具
  • Firebug
  • Komodo IDE英语Komodo IDE
  • Microsoft Script Debugger英语Microsoft Script Debugger
  • Microsoft Script Editor英语Microsoft Script Editor
  • Opera Dragonfly英语Opera Dragonfly
  • Venkman
  • Safari
文档生成器英语Documentation generator
  • JSDoc英语JSDoc
編輯器(比较英语Comparison of JavaScript-based source code editors
引擎
軟體框架
相關語言
相關技術
軟體套件管理系統
伺服器端
單元測試
  • Jasmine英语Jasmine (JavaScript framework)
  • Mocha英语Mocha (JavaScript framework)
  • QUnit英语QUnit
  • JavaScript单元测试框架列表英语List of unit testing frameworks#JavaScript
人物