fbpx
维基百科

SpiderMonkey

SpiderMonkey是世界上第一款JavaScript引擎,由前网景公司布兰登·艾克設計,後期由Mozilla基金会維護,以開放原始碼發佈。目前為Mozilla Firefox網頁瀏覽器所使用的JavaScript引擎,並也被嵌入到其他許多環境,例如GNOME 3桌面。

SpiderMonkey
開發者Mozilla基金会Mozilla公司
目前版本
  • 45 (2016年3月8日;穩定版本)[1]
  • 52.7.2 (2018年3月15日;不稳定版)[2]
源代码库
  • hg.mozilla.org/mozilla-central/
编程语言CC++
操作系统跨平台
系統平台IA-32x86-64ARMMIPSSPARC[3]
类型JavaScript引擎
许可协议MPL[4]
网站spidermonkey.dev

歷史

1995年,艾克被招聘到Netscape,目的是让他在瀏覽器中實作Scheme程式語言[5],於是他於10天內開發出JavaScript [6](當工程管理決定這個程式語言必須長得像Java時,使用Scheme的想法被放棄[5])。之後艾克必須為這個重大的技術負債付出代價,在1996年秋天,艾克留在家裡兩個禮拜,並且重寫了Mocha程式庫,也是後來大家所知道的SpiderMonkey[6]。SpiderMonkey這個名字源自於電影癟四與大頭蛋横贯美国,電影裡的角色Tom Anderson提到,主要演員就像一對蜘蛛猴(Spider Monkey)夫妻在自慰[7]。2011年,艾克將SpiderMonkey程式碼的管理交給戴夫·曼達林(Dave Mandelin)[6]

TraceMonkey

TraceMonkey是第一个为JavaScript语言編寫的JIT編譯器,於2008年8月23日发布并最先作為Firefox 3.5的SpiderMonkey中的編譯引擎。相比Firefox 3.0的編譯器,它提供了高達20到40倍的效能改善[8]

比起編譯全部函式,TraceMonkey採用追蹤即時編譯(trace Just-in-time Compilation)將JavaScript編譯成二進位碼(Binary code)以提高執行效能,它的運作方式是在執行期間藉由追蹤和記錄控制流程資料類型,將其用於建構追蹤樹(Trace Trees)(页面存档备份,存于互联网档案馆),以生成高度最佳化路徑的原生碼,追蹤樹技術由爾灣加州大學研究團隊貢獻,安德里亞斯·加爾是該團隊的负责人[9]

JägerMonkey的增進,使得TraceMonkey被遺棄,特別是在SpiderMonkey中类型推论引擎的開發,TraceMonkey自Firefox 11開始已經被停止使用[10]

JägerMonkey

JägerMonkey由Mozilla自2010年年初开发,在內部被稱為MethodJIT,它被用來改善效能,特別是当某些情況下TraceMonkey無法生成穩定的原生碼[11][12]。JägerMonkey於Mozilla Firefox 4開始被使用,採用組合編譯(Method JIT)和組譯器(Assembler),它的組譯器移植自WebKit的Nitro引擎(SFX,SquirrelFish Extreme)[13]。後期Method JIT与TraceMonkey的Tracing JIT整合,使SpiderMonkey的速度更快。

JägerMonkey的運作很不同于其他編譯器,傳統的編譯器是藉由建立控制流圖並將其最佳化,JägerMonkey則是透過重覆線性前進循環SpiderMonkey字节码,也就是內部函式表示法。雖然這種方式阻碍重新排序指令的最佳化,但這對JavaScript這個经常改變變數類型而需要重新編譯的語言来说,JägerMonkey有快速編譯的優勢。

Mozilla在JägerMonkey中實做了一個臨界值的最佳化,重要的還有多形態內嵌快取( Polymorphic inline caching)及类型推论[14],Kraken和V8测试分数显示,类型推论可以分别带来44%与30%的分数提升。[15]

TraceMonkey及JägerMonkey的JIT技術的異同在一篇hacks.mozilla.org的文章(页面存档备份,存于互联网档案馆)中有做解釋,深入的技術細節可在一篇由SpiderMonkey的開發者Chris Leary的文章中取得,更多技術資訊还可在其他開發者的部落格中找到:dvander(页面存档备份,存于互联网档案馆)、。

標準

SpiderMonkey實作了ECMA-262第5.1版(ECMAScript)和其他許多特色,而ECMA-357(ECMAScript for XML (E4X))已在2013年取消支援[16]

即便SpiderMonkey在Firefox中被使用,它并不提供一些主要環境,像是文档对象模型(DOM)。

內部

SpiderMonkey是以CC++语言編寫,並包含直譯器、IonMonkey即時編譯垃圾回收器

IonMonkey

IonMonkey是Mozilla的第三個JIT編譯器,它啟用了許多新的最佳化技術,但是這些特色無法在之前的JägerMonkey架構運行[17]

IonMonkey更像傳統的編譯器,它使用中間表示層(IR,Intermediate representation)的静态单赋值形式將SpiderMonkey的字节码轉換為控制流圖(Control Flow Graph),這個結構令其他語言使用的最佳化技術可被使用在JavaScript,其中包含形態的特殊化(type specialization)、行內函式(Inline function)、線性掃描的暫存器配置(linear scan register allocator)、死碼刪除(Dead code elimination)以及盡可能將程序移出迴圈外(Loop-Invariant Code Motion)[18]

该編譯器可以在ARMX86X86-64上快速的將JavaScript函式轉換成原生碼

2013年初發行的Firefox 18中開始採用IonMonkey並将其作為預設引擎[19],这改進了TraceMonkey與JaegerMonkey不會對程式碼進行解析、自動運行最佳化的缺點。[20]

OdinMonkey

OdinMonkey被用於最佳化JavaScript的子集asm.js,OdinMonkey並非一個JIT編譯器,它依然採用IonMonkey作為編譯器,这於2013年6月25日正式釋出的Firefox 22起採用[21]

實作

SpiderMonkey可被嵌入於應用程式中,並为應用程式提供執行JavaScript的能力。不完整名單如下:

SpiderMonkey亦提供了JavaScript Shell,它是一個互動式開發環境,可讓開發者使用命令列來執行JavaScript程式[23]。 許多大型組織使用SpiderMonkey來管理他們前端應用程式的JavaScript。

參考資料

  1. ^ https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Releases/45.
  2. ^ https://hg.mozilla.org/releases/mozilla-esr52/rev/FIREFOX_52_7_2esr_RELEASE; 检索日期: 2018年3月23日.
  3. ^ . Developer.mozilla.org. 2013-01-10 [2013-03-21]. (原始内容存档于2013-11-14). 
  4. ^ Mozilla Licensing Policies, mozilla.org, [2013-03-26], (原始内容存档于2013-07-15) 
  5. ^ 5.0 5.1 Eich, Brendan. . BrendanEich.com. 2008-04-03 [2013-01-24]. (原始内容存档于2011-07-03). 
  6. ^ 6.0 6.1 6.2 Eich, Brendan. . BrendanEich.com. 2011-06-21 [2013-01-24]. (原始内容存档于2011-07-14). 
  7. ^ Eich, Brendan. . 2011-08-19 [2013-01-24]. (原始内容存档于2013-01-13). 
  8. ^ Paul, Ryan. Firefox to get massive JavaScript performance boost. Ars Technica. 2008-08-22 [2013-03-21]. (原始内容于2008-12-17). 
  9. ^ TraceMonkey: JavaScript Lightspeed. BrendanEich.com. 2008-08-23 [2015-10-25]. (原始内容于2015-12-04). 
  10. ^ Nethercote, Nicholas. . Blog.mozilla.com. 2011-11-01 [2013-03-21]. (原始内容存档于2012-03-28). 
  11. ^ . Bailopan.net. 2010-02-26 [2013-03-21]. (原始内容存档于2013-03-24). 
  12. ^ Paul, Ryan. Mozilla borrows from WebKit to build fast new JS engine. Ars Technica. 2010-03-09 [2013-03-21]. (原始内容于2011-07-09). 
  13. ^ . [2012-04-22]. (原始内容存档于2011-11-14). 
  14. ^ JaegerMonkey - MozillaWiki. Wiki.mozilla.org. [2013-03-21]. (原始内容于2013-08-23). 
  15. ^ David Mandelin. . 2011-08-30 [2011-09-19]. (原始内容存档于2010-12-11). 
  16. ^ . [2013-02-05]. (原始内容存档于2014-04-23). 
  17. ^ Platform/Features/IonMonkey - MozillaWiki. Wiki.mozilla.org. 2013-02-11 [2013-03-21]. (原始内容于2013-03-08). 
  18. ^ . Infoq.com. [2013-03-21]. (原始内容存档于2012-12-08). 
  19. ^ Firefox Notes - Desktop. Mozilla.org. 2013-01-08 [2013-03-21]. (原始内容于2013-11-07). 
  20. ^ 躲在 Firefox 18 裡的神奇離子猴 (@@"). 2013-01-09 [2013-01-09]. (原始内容于2013-01-11). 
  21. ^ Firefox Notes - Desktop. Mozilla.org. 2013-06-25 [2013-06-25]. (原始内容于2013-10-28). 
  22. ^ Bolso, Erik Inge. . Linux Journal. 2005-03-08 [2010-08-05]. (原始内容存档于2010-03-15). 
  23. ^ Introduction to the JavaScript shell. MDN. Mozilla Developer Network. 2019-03-18 [2019-05-20]. (原始内容于2019-05-28). The JavaScript shell (js) is a command-line program included in the SpiderMonkey source distribution. It is the JavaScript equivalent of Python's interactive prompt, the Lisp read-eval-print loop, or Ruby's irb. This article explains how to use the shell to experiment with JavaScript code and run JavaScript programs. 

外部連結

  • 官方网站  
  • Are We Fast Yet?(页面存档备份,存于互联网档案馆)——官方基準和比較

spidermonkey, 是世界上第一款javascript引擎, 由前网景公司的布兰登, 艾克設計, 後期由mozilla基金会維護, 以開放原始碼發佈, 目前為mozilla, firefox網頁瀏覽器所使用的javascript引擎, 並也被嵌入到其他許多環境, 例如gnome, 3桌面, 開發者mozilla基金会, mozilla公司目前版本45, 2016年3月8日, 穩定版本, 2018年3月15日, 不稳定版, 源代码库hg, mozilla, mozilla, central, 编程语言c, 操. SpiderMonkey是世界上第一款JavaScript引擎 由前网景公司的布兰登 艾克設計 後期由Mozilla基金会維護 以開放原始碼發佈 目前為Mozilla Firefox網頁瀏覽器所使用的JavaScript引擎 並也被嵌入到其他許多環境 例如GNOME 3桌面 SpiderMonkey開發者Mozilla基金会 Mozilla公司目前版本45 2016年3月8日 穩定版本 1 52 7 2 2018年3月15日 不稳定版 2 源代码库hg wbr mozilla wbr org wbr mozilla central wbr 编程语言C C 操作系统跨平台系統平台IA 32 x86 64 ARM MIPS SPARC 3 类型JavaScript引擎许可协议MPL 4 网站spidermonkey wbr dev 目录 1 歷史 1 1 TraceMonkey 1 2 JagerMonkey 2 標準 3 內部 3 1 IonMonkey 3 2 OdinMonkey 4 實作 5 參考資料 6 外部連結歷史 编辑1995年 艾克被招聘到Netscape 目的是让他在瀏覽器中實作Scheme程式語言 5 於是他於10天內開發出JavaScript 6 當工程管理決定這個程式語言必須長得像Java時 使用Scheme的想法被放棄 5 之後艾克必須為這個重大的技術負債付出代價 在1996年秋天 艾克留在家裡兩個禮拜 並且重寫了Mocha程式庫 也是後來大家所知道的SpiderMonkey 6 SpiderMonkey這個名字源自於電影癟四與大頭蛋横贯美国 電影裡的角色Tom Anderson提到 主要演員就像一對蜘蛛猴 Spider Monkey 夫妻在自慰 7 2011年 艾克將SpiderMonkey程式碼的管理交給戴夫 曼達林 Dave Mandelin 6 TraceMonkey 编辑 TraceMonkey是第一个为JavaScript语言編寫的JIT編譯器 於2008年8月23日发布并最先作為Firefox 3 5的SpiderMonkey中的編譯引擎 相比Firefox 3 0的編譯器 它提供了高達20到40倍的效能改善 8 比起編譯全部函式 TraceMonkey採用追蹤即時編譯 trace Just in time Compilation 將JavaScript編譯成二進位碼 Binary code 以提高執行效能 它的運作方式是在執行期間藉由追蹤和記錄控制流程及資料類型 將其用於建構追蹤樹 Trace Trees 页面存档备份 存于互联网档案馆 以生成高度最佳化路徑的原生碼 追蹤樹技術由爾灣加州大學研究團隊貢獻 安德里亞斯 加爾是該團隊的负责人 9 JagerMonkey的增進 使得TraceMonkey被遺棄 特別是在SpiderMonkey中类型推论引擎的開發 TraceMonkey自Firefox 11開始已經被停止使用 10 JagerMonkey 编辑 JagerMonkey由Mozilla自2010年年初开发 在內部被稱為MethodJIT 它被用來改善效能 特別是当某些情況下TraceMonkey無法生成穩定的原生碼 11 12 JagerMonkey於Mozilla Firefox 4開始被使用 採用組合編譯 Method JIT 和組譯器 Assembler 它的組譯器移植自WebKit的Nitro引擎 SFX SquirrelFish Extreme 13 後期Method JIT与TraceMonkey的Tracing JIT整合 使SpiderMonkey的速度更快 JagerMonkey的運作很不同于其他編譯器 傳統的編譯器是藉由建立控制流圖 並將其最佳化 JagerMonkey則是透過重覆線性前進循環SpiderMonkey字节码 也就是內部函式表示法 雖然這種方式阻碍重新排序指令的最佳化 但這對JavaScript這個经常改變變數類型而需要重新編譯的語言来说 JagerMonkey有快速編譯的優勢 Mozilla在JagerMonkey中實做了一個臨界值的最佳化 重要的還有多形態內嵌快取 Polymorphic inline caching 及类型推论 14 Kraken和V8测试分数显示 类型推论可以分别带来44 与30 的分数提升 15 TraceMonkey及JagerMonkey的JIT技術的異同在一篇hacks mozilla org的文章 页面存档备份 存于互联网档案馆 中有做解釋 深入的技術細節可在一篇由SpiderMonkey的開發者Chris Leary的文章中取得 更多技術資訊还可在其他開發者的部落格中找到 dvander 页面存档备份 存于互联网档案馆 dmandelin 標準 编辑SpiderMonkey實作了ECMA 262第5 1版 ECMAScript 和其他許多特色 而ECMA 357 ECMAScript for XML E4X 已在2013年取消支援 16 即便SpiderMonkey在Firefox中被使用 它并不提供一些主要環境 像是文档对象模型 DOM 內部 编辑SpiderMonkey是以C和C 语言編寫 並包含直譯器 IonMonkey即時編譯和垃圾回收器 IonMonkey 编辑 IonMonkey是Mozilla的第三個JIT編譯器 它啟用了許多新的最佳化技術 但是這些特色無法在之前的JagerMonkey架構運行 17 IonMonkey更像傳統的編譯器 它使用中間表示層 IR Intermediate representation 的静态单赋值形式將SpiderMonkey的字节码轉換為控制流圖 Control Flow Graph 這個結構令其他語言使用的最佳化技術可被使用在JavaScript 其中包含形態的特殊化 type specialization 行內函式 Inline function 線性掃描的暫存器配置 linear scan register allocator 死碼刪除 Dead code elimination 以及盡可能將程序移出迴圈外 Loop Invariant Code Motion 18 该編譯器可以在ARM X86及X86 64上快速的將JavaScript函式轉換成原生碼 2013年初發行的Firefox 18中開始採用IonMonkey並将其作為預設引擎 19 这改進了TraceMonkey與JaegerMonkey不會對程式碼進行解析 自動運行最佳化的缺點 20 OdinMonkey 编辑 OdinMonkey被用於最佳化JavaScript的子集asm js OdinMonkey並非一個JIT編譯器 它依然採用IonMonkey作為編譯器 这於2013年6月25日正式釋出的Firefox 22起採用 21 實作 编辑SpiderMonkey可被嵌入於應用程式中 並为應用程式提供執行JavaScript的能力 不完整名單如下 Mozilla Firefox Thunderbird SeaMonkey Adobe Acrobat Adobe Reader Adobe Flash Professional Adobe Dreamweaver GNOME桌面環境 第3版和更高版本 Yahoo Widgets UOX 3 網路創世紀私人伺服器 FreeSWITCH 開放原始碼通信軟體 0 A D 即時戰略遊戲 ELinks 英语 ELinks 純文字網頁瀏覽器 22 Synchronet 英语 Synchronet BBS 電子郵件和伺服器軟體SpiderMonkey亦提供了JavaScript Shell 它是一個互動式開發環境 可讓開發者使用命令列來執行JavaScript程式 23 許多大型組織使用SpiderMonkey來管理他們前端應用程式的JavaScript 參考資料 编辑 https developer mozilla org en US docs Mozilla Projects SpiderMonkey Releases 45 https hg mozilla org releases mozilla esr52 rev FIREFOX 52 7 2esr RELEASE 检索日期 2018年3月23日 1 8 8 SpiderMonkey MDN Developer mozilla org 2013 01 10 2013 03 21 原始内容存档于2013 11 14 Mozilla Licensing Policies mozilla org 2013 03 26 原始内容存档于2013 07 15 5 0 5 1 Eich Brendan Popularity BrendanEich com 2008 04 03 2013 01 24 原始内容存档于2011 07 03 6 0 6 1 6 2 Eich Brendan New JavaScript Engine Module Owner BrendanEich com 2011 06 21 2013 01 24 原始内容存档于2011 07 14 Eich Brendan Mapping the Monkeysphere 2011 08 19 2013 01 24 原始内容存档于2013 01 13 Paul Ryan Firefox to get massive JavaScript performance boost Ars Technica 2008 08 22 2013 03 21 原始内容存档于2008 12 17 TraceMonkey JavaScript Lightspeed BrendanEich com 2008 08 23 2015 10 25 原始内容存档于2015 12 04 Nethercote Nicholas SpiderMonkey is on a diet Nicholas Nethercote Blog mozilla com 2011 11 01 2013 03 21 原始内容存档于2012 03 28 JaegerMonkey Fast JavaScript Always Mystery Bail Theater Bailopan net 2010 02 26 2013 03 21 原始内容存档于2013 03 24 Paul Ryan Mozilla borrows from WebKit to build fast new JS engine Ars Technica 2010 03 09 2013 03 21 原始内容存档于2011 07 09 存档副本 2012 04 22 原始内容存档于2011 11 14 JaegerMonkey MozillaWiki Wiki mozilla org 2013 03 21 原始内容存档于2013 08 23 David Mandelin David Mandelin s blog 2011 08 30 2011 09 19 原始内容存档于2010 12 11 759422 Remove use of e4x in account creation 2013 02 05 原始内容存档于2014 04 23 Platform Features IonMonkey MozillaWiki Wiki mozilla org 2013 02 11 2013 03 21 原始内容存档于2013 03 08 IonMonkey Mozilla s new JavaScript JIT compiler Infoq com 2013 03 21 原始内容存档于2012 12 08 Firefox Notes Desktop Mozilla org 2013 01 08 2013 03 21 原始内容存档于2013 11 07 躲在 Firefox 18 裡的神奇離子猴 2013 01 09 2013 01 09 原始内容存档于2013 01 11 Firefox Notes Desktop Mozilla org 2013 06 25 2013 06 25 原始内容存档于2013 10 28 Bolso Erik Inge 2005 Text Mode Browser Roundup Linux Journal 2005 03 08 2010 08 05 原始内容存档于2010 03 15 Introduction to the JavaScript shell MDN Mozilla Developer Network 2019 03 18 2019 05 20 原始内容存档于2019 05 28 The JavaScript shell js is a command line program included in the SpiderMonkey source distribution It is the JavaScript equivalent of Python s interactive prompt the Lisp read eval print loop or Ruby s irb This article explains how to use the shell to experiment with JavaScript code and run JavaScript programs 外部連結 编辑官方网站 Are We Fast Yet 页面存档备份 存于互联网档案馆 官方基準和比較 取自 https zh wikipedia org w index php title SpiderMonkey amp oldid 71098330, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。