JS 各類引擎介紹javascript
http://www.oschina.net/project/tag/296/javascript-enginehtml
不一樣瀏覽器有不一樣的JS引擎:java
WebKit , Safari瀏覽器 ->SquirrelFish Extreme,web
Firefox àTraceMonkey引擎正則表達式
Google Chrome àV8引擎,(C++)chrome
Opera -> Carakanapi
Mozilla ->SpiderMonkey(C語言)瀏覽器
Mozilla à Rhino( Java)框架
Mozilla ->JaegerMonkeyide
SEE (Simple ECMAScript Engine) C語言開發的輕量級的 ECMAScript (JavaScript) 解析器和實時運行環境
(1)javascript 解析引擎 V8(C++)
V8 是 Google 發佈的開源 JavaScript 引擎,採用 C++ 編寫,在 Google 的 Chrome 瀏覽器中被使用。V8 引擎能夠獨立運行,也能夠用來嵌入到 C++ 應用程序中執行。\
(2)javascript 腳本引擎 SpiderMonkey (c語言)
http://www.oschina.net/p/spidermonkey
SpiderMonkey是Mozilla項目的一部分,是一個用C語言實現的JavaScript腳本引擎,另外還有一個叫作Rhino的Java版 本。
爲了在SpiderMonkey中運行JavaScript代碼,應用程序必須有三個要素:JSRuntime,JSContext和全局對象。
運行時環境
JSRuntime,爲其中的JavaScript變量、對象、腳本和應用程序中使用的上下文分配空間。每一個JSContext和腳本中的每一個對象都生活在一個 JSRuntime中。他們不能轉移到其餘運行時上或在與其它運行時共享。通常來講大多數應用程序只須要一個運行時環境。
上下文
JSContext,就像是一臺小機器,它涉及JavaScript代碼和對象的不少東西。它能夠編譯和執行腳本、獲取和設置對象屬性、調用 JavaScript函數、一種類型轉換爲另外一種JavaScript數據、建立對象,等等。幾乎全部JSAPI函數都要一個JSContext*做爲其第一個參數,就像<stdio.h>中的大多數函數都須要FILE*同樣.
全局對象
全局對象包含全部能夠在JavaScript代碼中使用的類、函數和變量。
當JavaScript代碼要作一些事時,好比window.open("http://www.mozilla.org/"),實際上它是在訪問一個全局屬性(全局對象的屬性),在這裏是window。
腳本能看到的全局屬性徹底由應用程序控制。應用程序首先建立一個對象並加入JavaScript標準類,如Array和Object。而後加入任何程序想加入的自定義的類、函數和變量(象這裏的window)。應用程序每次運行js腳本(例如使用JS_EvaluateScript)時提供了該腳本使用的全局對象。至於腳本,它也能夠建立本身全局函數和變量。全部的這些函數、類和變量都做爲屬性存儲在全局對象中。
(3)JS 解析器 rhino(Java)
http://www.oschina.net/p/rhino
Rhino是用純Java寫成的JavaScript的開放源代碼實現。它最常被用於嵌入Java應用程序,以便爲終端用戶提供腳本的能力。
(4)JavaScript 解析引擎 Simple ECMAScript Engine(C語言)
SEE(Simple ECMAScript Engine) 是一個用C語言開發的輕量級的 ECMAScript (JavaScript) 解析器和實時運行環境。支持ECMAScript Edition 3, JavaScript 1.5 。
http://www.oschina.net/p/squirrelfish+extreme
幾周前 Google Chrome 發佈以後,因其創新的 UI 以及出色的 JavaScript 執行效率而備受讚譽。最近,做爲 Safari 與 Chrome 瀏覽器內核的 WebKit 發佈了一個新 JavaScript 引擎,SquirrelFish Extreme,通過測試,該引擎的在執行速度上明顯超過 Chrome 的 V8。下圖是性能的比較
http://www.oschina.net/p/carakan
Opera全新JS引擎Carakan,目前數度是其餘已存在JavaScript引擎(基於SunSpider)的2.5倍。其在轉化爲本地機器代碼時專門針對正則表達式作了優化,有意思的是,Chrome瀏覽器也剛剛宣佈了此點。
Carakan引擎的三個顯著新特性:
1.基於寄存器的字節碼:以前的引擎「ECMAScript」使用的是基於堆棧字節碼指令集,這種基於對堆棧存取的方法對於生成字節碼是比較簡單的。
在新的引擎裏,咱們採用了基於寄存器的字節碼指令集,這種方式採用了固定大小的寄存器,每次操做均可以訪問任意的寄存器,更少的指令被執行而且不會拷貝大量的數據。
2.本地代碼生成:咱們將整個或部分「ECMAScript」引擎編譯到本地代碼中以達到更快的執行速度。
3.自動對象分類:在新的引擎中每一個對象都是被封裝成類以存取不一樣的數據,這些類的劃分是與原型保持一致的。
每一個瀏覽器的JS引擎都不同嗎?
如今每一個瀏覽器基本上都有本身的JS引擎(非瀏覽器引擎)了,如Firefox瀏覽器的TraceMonkey引擎,Google Chrome瀏覽器的V8引擎,Safari瀏覽器有SquirrelFish Extreme,目前又增長了Opera的Carakan。
http://www.oschina.net/p/tracemonkey
TraceMonkey是套開放源代碼、以C++語言所編寫的新一代JavaScript引擎,於2008年8月23日正式發佈。目前爲Mozilla的Firefox網頁瀏覽器3.五、3.6版本所使用。
TraceMonkey採用了爾灣加州大學團隊Andreas Gal、Michael Bebenita、Mason Chang和Gregor Wagner所貢獻的「Tracing」技術,Andreas Gal目前爲TraceMonkey的項目領導人、以及Mozilla和Adobe所合做的Tamarin計劃所開發的「Nanojit」技術。
http://www.oschina.net/p/jaegermonkey
Mozilla預計將在9月1日發佈JaegerMonkey引 擎,所以JaegerMonkey將被整合到Firefox 4.0。
V8基準測試顯示,JaegerMonkey引擎積分爲6829 ms,TraceMonkey引擎積分爲6841 ms。Sunspider測試顯示,JaegerMonkey引擎仍然要落後於TraceMonkey引擎——754 ms vs. 718 ms,並且JaegerMonkey引擎運行速度仍然落後於Webkit瀏覽器,Chrome和Safari的積分都要低於400 ms,Chrome瀏覽器的積分甚至逼近300 ms。Opera的積分也低於300s。
JaegerMonkey引擎在今年初發布是,其目標是突破Sunspider測試的500 ms大關。固然,這已經沒法知足通常用戶的需求了,畢竟連IE9開發版積分都已經低於500 ms。Mozilla還表示,JaegerMonkey引擎的目標是要超越競爭瀏覽器,這就意味着Mozilla的目標是300ms如下。
Mozilla稱,JaegerMonkey是從新編寫的,過去8周的時間JaegerMonkey已經有很大的改進。在下面6周的時 間,Mozilla將完善JaegerMonkey引擎,爲9月1日順利發佈作好充分地準備。
Mozilla宣傳,JaegerMonkey引擎的運行速度是競爭瀏覽器10多倍。
http://www.oschina.net/p/webkit
WebKit是開源的Web瀏覽器引擎,蘋果的Safari、谷歌的Chrome瀏覽器都是基於這個框架來開發的。WebKit 還支持移動設備和手機,包括iPhone和Android手機都是使用WebKit作爲瀏覽器的核心。
(10)WebKitGTK+