javascript引擎

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編寫成的網頁伺服器,這有利於在伺服器端和客戶端使用同樣的代碼。

引擎套用

主要的網頁瀏覽器JavaScript引擎:

Mozilla

SpiderMonkey,第一款JavaScript引擎,由Brendan Eich在Netscape Communications時編寫,用於Mozilla Firefox 1.0~3.0版本。

Rhino,由Mozilla基金會管理,開放原始碼,完全以Java編寫。

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。

在實現和方言中存在著一些差別。一種語言的方言有一些與語言不同的地方。實現能夠執行該語言或方言編寫的程式。

應用程式(實現)方言和最後版本ECMAScript版本
Chrome瀏覽器,V8引擎 JavaScript ECMA-262,版本3
Mozilla Firefox,Gecko排版引擎,SpiderMonkey和Rhino JavaScript 1.8.1 ECMA-262,版本3
Opera 一些JavaScript 1.5特性及一些JScript擴展 ECMA-262,版本3
KHTML排版引擎,KDE項目的Konqueror與蘋果的Safari 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

相關詞條

相關搜尋

熱門詞條

聯絡我們