SpiderMonkey
SpiderMonkey是世界上頭一款 JavaScript ia̋n-jín,由前網景公司的布蘭登 ・ 艾克設計,尾期由 Mozilla 基金會咧維護,以開放原始碼發佈。目前為 Mozilla Firefox 網頁瀏覽器所使用的 JavaScript ia̋n-jín,並且去予斷去其他的誠濟環境,比如講 GNOME 三桌面。
歷史
一九九五年,艾克予人招著 Netscape,目的是予伊佇瀏覽器當中實作 Scheme 程式語言,所以伊佇咧十工開發出 JavaScript(做工程管理決定這个程式語言著愛生做像 Java 時,使用 Scheme 的想法予人放棄)。 了後艾克著愛為這个重大的技術負債付出代價,佇咧一九九六年秋天,艾克留佇厝內兩禮拜,而且重寫矣 Mocha 程式庫,嘛是尾仔逐家知影的 SpiderMonkey。SpiderMonkey 這个名字源自於電影脯四佮大頭卵橫貫美國,電影內底的角色 Tom Anderson 講著,主要演員就親像一對蜘蛛猴(Spider Monkey)翁仔某咧自慰。二空一一年,艾克將 SpiderMonkey 程式碼的管理交予戴夫 ・ 曼達林(Dave Mandelin)。
TraceMonkey
TraceMonkey 是頭一个為 JavaScript 語言編寫的 JIT 編譯器,佇二空空八年八月二三發布並且頭先作為 Firefox 三-c五的 SpiderMonkey 中的編譯 ia̋n-jín。相比並 Firefox 三更零的編譯器,伊提供矣 _ 懸到二十到四十倍的效能改善 _。
比起編譯全部函式,TraceMonkey 採用追蹤即時編譯(trace Just-in-time Compilation)將 JavaScript 編譯做二進位碼(Binary code)以提高執行效能,伊的運作方式是佇咧執行期間透過追蹤佮記錄控制流程佮資料類型,會當用佇建構追蹤樹仔(Trace Trees), 用生做懸度最佳化路徑的原生碼,追蹤樹仔技術由爾灣加州大學研究團隊貢獻,安德里亞斯 ・ 加爾是這个團隊的負責人。
JägerMonkey 的增進,予得 TraceMonkey 予人放捒,特別是佇咧 SpiderMonkey 中類型推論 ia̋n-jín 的開發,TraceMonkey 自 Firefox 十一開始已經予人停止使用。
JägerMonkey
JägerMonkey 由 Mozilla 自二空一空年年初開發,佇內部予人叫做是 MethodJIT,伊予人用來改善效能,特別是做某一寡情形下 TraceMonkey 無法度生穩定的原生碼。JägerMonkey 佇咧 Mozilla Firefox 四開始使用,是用組合編譯(Method JIT)和組譯器(Assembler), 伊的組譯器移植自 WebKit 的 Nitro ia̋n-jín(SFX,SquirrelFish Extreme)。 尾期 Method JIT 佮 TraceMonkey 的 Tracing JIT 整合,使 SpiderMonkey 的速度閣較緊咧。
JägerMonkey 的運作誠無仝款其他編譯器,傳統的編譯器是藉著建立控制流圖並共其最佳化,JägerMonkey 是透過重複線性進前循環 SpiderMonkey 位元組碼,也就是內部函式表示法。雖罔這種方式阻礙重新排序指令的最佳化,猶毋過這對 JavaScript 這个經常改變數類型需要重新編譯的語言來講,JägerMonkey 有快速編譯的優勢。
Mozilla 佇咧 JägerMonkey 中實做一个臨界值的最佳化,重要的猶閣有多形態內嵌緊取(Polymorphic inline caching)佮類型推論,Kraken 和 V 八測試分數顯示,類型推論會當分別帶來百分之四十四佮百分之三十的分數提升。
TraceMonkey 佮 JägerMonkey 的 JIT 技術的𫝛在一篇 hacks . mozilla . org 的文章內底有做解說,深入的技術鋩角會當佇一篇由 SpiderMonkey 的開發者 Chris Leary 的文章當中取得,閣較濟技術資訊閣會當佇其他開發者的部落格中揣著:dvander、dmandelin。
標準
SpiderMonkey 實作矣 ECMA 抹兩百六十二第五孵一版(ECMAScript)佮其他真濟特色,而且 ECMA 被三百五十七(ECMAScript for XML ( E 四 X ))已經佇二空一三年取消支援。
就算 SpiderMonkey 佇咧 Firefox 中予人使用,伊並無提供一寡主要的環境,親像文件模型(DOM)。
內部
SpiderMonkey 是以 C 和 C + + 語言編寫,並且包括直譯器、IonMonkey 即時編譯佮糞埽回收器。
IonMonkey
IonMonkey 是 Mozilla 的第三个 JIT 編譯器,伊啟用真濟新的最佳化技術,但是遮的特色無法度佇咧進前 JägerMonkey 架構運行。
IonMonkey 閣較成做傳統的編譯器,伊使用中央表示層(IR,Intermediate representation)的靜態單才值形式會當共 SpiderMonkey 的位元組碼轉換做控制流圖(Control Flow Graph), 這个結構令其他的語言使用的最佳化技術會當用佇咧 JavaScript,其中包括形態的特殊化(type specialization)、 行內函式(Inline function)、 線性掃描的暫存器組態(linear scan register allocator)、 死碼刪除(Dead code elimination)以及盡量共程式徙出來箍仔外(Loop-Invariant Code Motion)。
該編譯器會當佇 ARM、X 八十六佮 X 八十六鼻六十四上快速的將 JavaScript 函式轉做原生碼。
二空一三年初發行的 Firefox 十八中開始採用 IonMonkey 並共做預設 ia̋n-jín,這改進了 TraceMonkey 佮 JaegerMonkey 袂對程式碼來進行解析、自動運行最佳化的缺點。。
OdinMonkey
OdinMonkey 予人用佇最佳化 JavaScript 的子集 asm . js,OdinMonkey 毋是一个 JIT 編譯器,伊猶原採用 IonMonkey 當做編譯器,這佇二空一三年六月二五正式釋放的 Firefox 二十二起採用。
實作
SpiderMonkey 會當予人騙入去應用程式底,並為應用程式提供執行 JavaScript 的能力。無完整名單如下:
- Mozilla Firefox、Thunderbird、SeaMonkey
- Adobe Acrobat、Adobe Reader、Adobe Flash Professional、Adobe Dreamweaver
- GNOME 桌面環境,第三版佮閣較懸版本
- Yahoo ! Widgets
- UOX 三,_ 網路創世紀 _ 私人侍服器
- FreeSWITCH,開放原始碼通信軟體
- 零 A . D .,即時戰略遊戲
- ELinks,純文字網頁瀏覽器
- Synchronet,BBS、電子郵件佮侍服器軟體
SpiderMonkey 亦提供了 JavaScript Shell,伊是一个互動式開發環境,會當予開發者使用命令列來執行 JavaScript 程式。 真濟大型的組織使用 SpiderMonkey 來管理𪜶前端應用程式的 JavaScript。
參考資料
外部連結
- 官方網站
- Are We Fast Yet ?—— 官方基準佮比較