歷史發展
在2008年到2009年的第二次
瀏覽器大戰之前,
JavaScript引擎(
JavaScript engine)僅簡單地被當作能閱讀執行JavaScript
原始碼的解釋器。
目前為止,最通用的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
微軟
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版本開始使用。
其它
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。
在實現和方言中存在著一些差別。一種語言的方言有一些與語言不同的地方。實現能夠執行該語言或方言編寫的程式。
應用程式(實現) | 方言和最後版本 | ECMAScript版本 |
---|
Chrome瀏覽器,V8引擎 | JavaScript | ECMA-262,版本3 |
| JavaScript 1.8.1 | ECMA-262,版本3 |
Opera | | ECMA-262,版本3 |
| JavaScript 1.5 | ECMA-262,版本3 |
Adobe Acrobat | JavaScript 1.5 | ECMA-262,版本3 |
OpenLaszlo Platform | JavaScript 1.4 | ECMA-262,版本3 |
Max/MSP | JavaScript 1.5 | ECMA-262,版本3 |
ANT Galio 3 | JavaScript 1.5附帶RMAI擴展 | ECMA-262,版本3 |