อ่าน 7 นาที
สไปเดอร์มังกี้
SpiderMonkey เป็น เอ็นจิ้น JavaScript และ WebAssembly แบบโอเพนซอร์สโดย Mozilla Foundation [ 4 ] เอ็นจิ้นนี้ขับเคลื่อนเว็บ เบราว์เซอร์ Firefox และใช้คอมไพเลอร์ JavaScript แบบ...
สไปเดอร์มังกี้
| สไปเดอร์มังกี้ | |
|---|---|
| นักพัฒนา | |
| ปล่อย | กันยายน 2538 |
| เขียนเป็น | ซี , ซี++ |
| ระบบปฏิบัติการ | ข้ามแพลตฟอร์ม |
| แพลตฟอร์ม | IA-32 , x86-64 , ARM , MIPS , SPARC , [ 1 ] RISC-V [ 2 ] |
| พิมพ์ | JavaScriptและWebAssembly engine |
| ใบอนุญาต | MPL 2.0 [ 3 ] |
| เว็บไซต์ | spidermonkey |
| ที่เก็บข้อมูล | github.com/mozilla-firefox/firefox/tree/main/js/src , github.com/mozilla-spidermonkey |
SpiderMonkeyเป็นเอ็นจิ้นJavaScriptและWebAssemblyแบบโอเพนซอร์สโดยMozilla Foundation [ 4 ]เอ็นจิ้นนี้ขับเคลื่อนเว็บเบราว์เซอร์Firefox และใช้คอมไพเลอร์ JavaScript แบบ just-in-time (JIT) หลายรุ่นรวมถึง TraceMonkey, JägerMonkey, IonMonkey และ WarpMonkey รุ่นปัจจุบัน
นี่คือเอนจิน JavaScript ตัวแรก ที่เขียนโดยBrendan Eichที่Netscape Communications และต่อมาได้เปิดให้ใช้งานแบบโอเพนซอร์ส และปัจจุบันได้รับการดูแลรักษาโดยมูลนิธิ Mozilla การออกแบบของมันทำให้สามารถฝังลงในแอปพลิเคชันต่างๆ นอกเหนือจากเว็บเบราว์เซอร์ได้ โดยมีการใช้งานในระบบฐานข้อมูล MongoDB, Adobe Acrobat และสภาพแวดล้อมเดสก์ท็อป GNOME
ประวัติศาสตร์
ในปี 1995 Eich "เขียน JavaScript เสร็จภายในสิบวัน" [ 5 ] โดย "ได้รับการว่าจ้างให้ทำงานที่ Netscape ด้วยคำสัญญาว่าจะ 'เขียนScheme ' ในเบราว์เซอร์" [ 6 ] (แนวคิดในการใช้ Scheme ถูกยกเลิกเมื่อ "ฝ่ายบริหารด้านวิศวกรรม [ตัดสินใจ] ว่าภาษาต้อง 'ดูเหมือนJava ' ) [ 6 ]ในช่วงปลายปี 1996 Eich จำเป็นต้อง "ชำระหนี้ทางเทคนิค จำนวนมาก " ที่เหลือจากปีแรก จึง "อยู่บ้านเป็นเวลาสองสัปดาห์เพื่อเขียน Mocha ใหม่เป็นโค้ดเบสที่ต่อมาเป็นที่รู้จักในชื่อ SpiderMonkey" [ 5 ] (Mocha เป็นชื่อการทำงานดั้งเดิมของภาษา) [ 6 ] [ 7 ] ในปี 2011 Eich ได้โอนการจัดการโค้ด SpiderMonkey ให้กับ Dave Mandelin [ 5 ]
เวอร์ชัน
| เวอร์ชั่น | วันที่วางจำหน่าย | เวอร์ชัน ECMAScript | เวอร์ชันเบราว์เซอร์ | เพิ่มฟังก์ชันการทำงาน[ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] |
|---|---|---|---|---|
| 1.0 (มอคค่า) | กันยายน พ.ศ. 2538 [ 8 ] | Netscape Navigator 2.0b1 [ 13 ] |
| |
| 1.1 (มอคค่า) | สิงหาคม พ.ศ. 2539 | พื้นฐานสำหรับ ES1 | เน็ตสเคป เนวิเกเตอร์ 3.0 |
|
| 1.2 | มิถุนายน พ.ศ. 2540 | พื้นฐานสำหรับ ES3 | เน็ตสเคป เนวิเกเตอร์ 4.0-4.05 |
|
| 1.3 | ตุลาคม พ.ศ. 2541 | ES1 + ES2 (เป็นไปตามมาตรฐาน) | Netscape Navigator 4.06-4.7x |
|
| 1.4 | เซิร์ฟเวอร์เน็ตสเคป |
| ||
| 1.5 | พฤศจิกายน 2000 | อีเอส3 | Netscape Navigator 6, Firefox 1.0 |
|
| 1.6 | พฤศจิกายน 2548 | อี4เอ็กซ์ | Firefox 1.5 |
|
| 1.7 | ตุลาคม พ.ศ. 2549 | Firefox 2.0 |
| |
| 1.8 | มิถุนายน 2551 | Firefox 3.0 |
| |
| 1.8.1 | มิถุนายน 2552 | Firefox 3.5 [ 16 ] |
| |
| 1.8.5 | มีนาคม 2554 | อีเอส5 | Firefox 4.0 [ 18 ] |
|
| 1.8.8 | มกราคม 2555 | Firefox 10.0 |
| |
| 17 | พฤศจิกายน 2555 | Firefox 17.0 |
| |
| 24 | กันยายน 2556 | Firefox 24.0 |
| |
| 31 | กรกฎาคม 2557 | Firefox 31.0 | ||
| 38 | พฤษภาคม 2558 | Firefox 38.0 | ||
| 45 | มีนาคม 2559 | Firefox 45.0 | ||
| 52 | มีนาคม 2560 | อีเอส6 | Firefox 52.0 |
|
| 60 | พฤษภาคม 2561 | Firefox 60.0 | ||
| 68 | กรกฎาคม 2562 | Firefox 68.0 | ||
| 78 | มิถุนายน 2020 | Firefox 78.0 |
| |
| 91 | สิงหาคม 2564 | Firefox 91.0 |
| |
| 102 | มิถุนายน 2565 | Firefox 102.0 | ||
| 103 | กรกฎาคม 2565 | Firefox 103.0 | ||
| 131 | กันยายน 2024 [ 23 ] | Firefox 131.0 | ||
| 140 (ESR) | มิถุนายน 2568 | อีเอส16 | Firefox 140 (ESR) | |
| 150 | เมษายน 2569 | Firefox 150 | ||
ตำนาน: ไม่ได้รับการสนับสนุน ได้รับการสนับสนุน เวอร์ชั่นล่าสุด เวอร์ชันตัวอย่าง เวอร์ชันในอนาคต | ||||
มาตรฐาน
SpiderMonkey ใช้ข้อกำหนด ECMA-262 ( ECMAScript ) ECMA-357 ( ECMAScript สำหรับ XML (E4X)) ถูกยกเลิกในช่วงต้นปี 2556 [ 24 ]
ภายใน
SpiderMonkey เขียนด้วยภาษาC / C++และประกอบด้วยตัวแปลภาษาคอมไพเลอร์ JIT ชื่อ WarpMonkey และตัวจัดการหน่วยความจำอัตโนมัติ (garbage collector )
เทรซมังกี้
TraceMonkey [ 17 ]เป็นคอมไพเลอร์ JIT ตัวแรกที่เขียนขึ้นสำหรับภาษา JavaScript ในตอนแรกถูกนำเสนอเป็นตัวเลือกในเวอร์ชันเบต้าและแนะนำในบล็อกของ Brendan Eich เมื่อวันที่ 23 สิงหาคม 2551 [ 25 ]คอมไพเลอร์นี้ได้กลายเป็นส่วนหนึ่งของเวอร์ชันหลักในฐานะส่วนหนึ่งของ SpiderMonkey ในFirefox 3.5ซึ่งให้ "การปรับปรุงประสิทธิภาพที่เร็วขึ้นระหว่าง 20 ถึง 40 เท่า" เมื่อเทียบกับตัวแปลภาษาพื้นฐานในFirefox 3 [ 26 ]
แทนที่จะคอมไพล์ฟังก์ชันทั้งหมด TraceMonkey เป็นJIT สำหรับการติดตามการทำงาน ซึ่งทำงานโดยการบันทึกการไหลของควบคุมและประเภทข้อมูลระหว่างการประมวลผลของตัวแปลภาษา ข้อมูลเหล่านี้จะถูกนำไปใช้ในการสร้างแผนผังการติดตามซึ่งเป็นเส้นทางเฉพาะของโค้ดเนทีฟ
การปรับปรุง JägerMonkey ในที่สุดก็ทำให้ TraceMonkey ล้าสมัย โดยเฉพาะอย่างยิ่งกับการพัฒนา เอ็นจิ้น การอนุมานประเภท SpiderMonkey TraceMonkey หายไปจาก SpiderMonkey ตั้งแต่ Firefox 11 เป็นต้นไป[ 27 ]
เยเกอร์มังกี้
JägerMonkey ซึ่งมีชื่อภายในว่า MethodJIT เป็นคอมไพเลอร์ JIT แบบเมธอดทั้งหมดที่ออกแบบมาเพื่อปรับปรุงประสิทธิภาพในกรณีที่ TraceMonkey ไม่สามารถสร้างโค้ดเนทีฟ ที่เสถียร ได้[ 28 ] [ 29 ]เปิดตัวครั้งแรกในFirefox 4และในที่สุดก็เข้ามาแทนที่ TraceMonkey อย่างสมบูรณ์ และต่อมาก็ถูกแทนที่ด้วย IonMonkey
JägerMonkey ทำงานแตกต่างจากคอมไพเลอร์อื่นๆ ในกลุ่มเดียวกันอย่างมาก: ในขณะที่คอมไพเลอร์ทั่วไปทำงานโดยการสร้างและปรับแต่งกราฟการไหลของควบคุมที่แสดงถึงฟังก์ชัน แต่ JägerMonkey กลับทำงานโดยการวนซ้ำไปข้างหน้าแบบเชิงเส้นผ่านไบต์โค้ด ของ SpiderMonkey ซึ่งเป็นตัวแทนของฟังก์ชันภายใน แม้ว่าวิธีนี้จะห้ามการปรับแต่งที่ต้องมีการเรียงลำดับคำสั่งใหม่ แต่การคอมไพล์ของ JägerMonkey ก็มีข้อดีคือเร็วมาก ซึ่งมีประโยชน์สำหรับ JavaScript เนื่องจากต้องคอมไพล์ใหม่บ่อยครั้งเนื่องจากการเปลี่ยนแปลงประเภทของตัวแปร
Mozilla ได้นำการปรับปรุงประสิทธิภาพที่สำคัญหลายอย่างมาใช้ใน JägerMonkey ซึ่งที่สำคัญที่สุดคือแคชแบบอินไลน์โพลีมอร์ฟิกและการอนุมานประเภท[ 30 ]
ความแตกต่างระหว่างเทคนิค JIT ของ TraceMonkey และ JägerMonkey รวมถึงความจำเป็นในการใช้ทั้งสองเทคนิค ได้รับการอธิบายไว้ในบทความของ hacks.mozilla.orgคำอธิบายเชิงลึกเกี่ยวกับรายละเอียดทางเทคนิคเพิ่มเติมนั้น ได้รับการอธิบายโดย Chris Leary หนึ่งในผู้พัฒนา SpiderMonkey ในบล็อกโพสต์(ลิงก์ถูกปิดใช้งานแล้ว ถูกเก็บถาวรเมื่อวันที่ 9 ธันวาคม 2012 ที่archive.today ) สามารถค้นหาข้อมูลทางเทคนิคเพิ่มเติมได้ในบล็อกของนักพัฒนาคนอื่นๆ เช่นdvanderและdmandelin
ไอออนมังกี้
IonMonkey เป็นคอมไพเลอร์ JavaScript JIT ของ Mozilla ซึ่งมีจุดมุ่งหมายเพื่อเปิดใช้งานการเพิ่มประสิทธิภาพใหม่ๆ มากมายที่ไม่สามารถทำได้ด้วยสถาปัตยกรรม JägerMonkey รุ่นก่อนหน้า[ 31 ]
IonMonkey เป็นคอมไพเลอร์แบบดั้งเดิมมากกว่า โดยจะแปลงไบต์โค้ด SpiderMonkey เป็นกราฟควบคุมการไหลโดยใช้รูปแบบการกำหนดค่าเดี่ยวแบบคงที่ (SSA) สำหรับการแสดงผลระดับกลางสถาปัตยกรรมนี้ทำให้สามารถใช้การเพิ่มประสิทธิภาพที่รู้จักกันดีจากภาษาโปรแกรมอื่น ๆ สำหรับ JavaScript ได้ รวมถึงการกำหนดประเภทเฉพาะการแทรกฟังก์ชันการจัดสรรรีจิสเตอร์แบบสแกนเชิงเส้นการกำจัดโค้ดที่ไม่ได้ใช้งานและการเคลื่อนย้ายโค้ดที่ไม่เปลี่ยนแปลงในลูป[ 32 ]
คอมไพเลอร์สามารถสร้าง การแปล โค้ดเนทีฟที่ รวดเร็ว ของฟังก์ชัน JavaScript บน แพลตฟอร์ม ARM , x86และx86-64ได้ โดยเป็นเอ็นจิ้นเริ่มต้นตั้งแต่ Firefox 18 [ 19 ]
โอดินมังกี้
OdinMonkey เป็นชื่อของโมดูลเพิ่มประสิทธิภาพใหม่ของ Mozilla สำหรับasm.jsซึ่งเป็นส่วนย่อยของ JavaScript ที่คอมไพล์ได้ง่าย OdinMonkey เองไม่ใช่คอมไพเลอร์ JIT แต่ใช้คอมไพเลอร์ JIT ปัจจุบัน มันถูกรวมอยู่ใน Firefox ตั้งแต่เวอร์ชัน 22 [ 33 ] OdinMonkey ถูกปิดใช้งานโดยค่าเริ่มต้นตั้งแต่ Firefox 148 ที่วางจำหน่ายในเดือนกุมภาพันธ์ 2026 [ 34 ]
วาร์ปมังกี้
WarpMonkey JIT แทนที่เอ็นจิ้น IonMonkey เดิมตั้งแต่เวอร์ชัน 83 [ 22 ]มันสามารถแทรกสคริปต์อื่นๆ และปรับแต่งโค้ดตามข้อมูลและอาร์กิวเมนต์ที่กำลังประมวลผลได้ มันแปลงไบต์โค้ดและข้อมูลแคชแบบอินไลน์เป็น Mid-level Intermediate Representation (Ion MIR) กราฟนี้จะถูกแปลงและปรับให้เหมาะสมก่อนที่จะลดระดับลงเป็น Low-level Intermediate Representation (Ion LIR) LIR นี้จะทำการจัดสรรรีจิสเตอร์แล้วสร้างโค้ดเครื่องดั้งเดิมในกระบวนการที่เรียกว่าการสร้างโค้ด การปรับให้เหมาะสมในที่นี้ถือว่าสคริปต์ยังคงเห็นข้อมูลที่คล้ายกับที่เคยเห็นมาก่อน Baseline JITs มีความสำคัญต่อความสำเร็จในที่นี้เพราะมันสร้าง IC ที่ตรงกับข้อมูลที่สังเกตได้ หากหลังจากที่สคริปต์ถูกคอมไพล์ด้วย Warp แล้วพบข้อมูลที่ไม่พร้อมที่จะจัดการ มันจะทำการบายพาส กลไกการบายพาสจะสร้างเฟรมสแต็กเครื่องดั้งเดิมขึ้นใหม่ให้ตรงกับเค้าโครงที่ใช้โดย Baseline Interpreter แล้วแยกสาขาไปยังตัวแปลภาษาดังกล่าวราวกับว่าเรากำลังเรียกใช้มันอยู่ตลอดเวลา การสร้างเฟรมสแต็กนี้อาจใช้ตารางด้านข้างพิเศษที่บันทึกไว้โดย Warp เพื่อสร้างค่าที่ไม่มีอยู่จริงขึ้นมาใหม่[ 35 ]
ใช้
SpiderMonkey ถูกออกแบบมาเพื่อใช้งานร่วมกับแอปพลิเคชันอื่นๆ ที่มีสภาพแวดล้อมสำหรับ JavaScript รายชื่อแอปพลิเคชันบางส่วนมีดังต่อไปนี้:
- Mozilla Firefox , Thunderbird , SeaMonkeyและแอปพลิเคชันอื่นๆ ที่ใช้เฟรมเวิร์กแอปพลิเคชันของ Mozilla
- เว็บเบราว์เซอร์ที่แตกแขนงมาจาก Firefox ได้แก่Pale Moon , BasiliskและWaterfox
- แอปพลิเคชันจัดเก็บข้อมูล:
- MongoDBเปลี่ยนจากV8เป็น SpiderMonkey ในเวอร์ชัน 3.2 [ 36 ]
- Riakใช้ SpiderMonkey เป็นรันไทม์สำหรับการดำเนินการ MapReduce ของ JavaScript [ 37 ]
- ระบบฐานข้อมูลCouchDB (เขียนด้วย ภาษา Erlang ) JavaScript ถูกใช้สำหรับการกำหนดแผนที่ ตัวกรอง ฟังก์ชันลดรูป และการแสดงผลข้อมูล เช่น ในรูปแบบ HTML
- Adobe Acrobatและ Adobe Reader, Adobe Flash ProfessionalและAdobe Dreamweaver Adobe Acrobat DC ใช้ Spidermonkey 24.2 พร้อมการรองรับ ECMA-357 ที่ส่งต่อมา[ 38 ]
- สภาพแวดล้อมเดสก์ท็อป GNOMEเวอร์ชัน 3 และเวอร์ชันที่ใหม่กว่า
- สภาพแวดล้อมเดสก์ท็อป Cinnamonเวอร์ชัน 1.0 และเวอร์ชันที่ใหม่กว่า
- Yahoo! Widgetsซึ่งเดิมชื่อ Konfabulator
- FreeSWITCHซึ่งเป็นซอฟต์แวร์โอเพนซอร์สสำหรับระบบโทรศัพท์ ใช้ SpiderMonkey เพื่อให้ผู้ใช้สามารถเขียนสคริปต์การจัดการการโทรด้วย JavaScript ได้
- PythonMonkeyใช้ SpiderMonkey เพื่ออนุญาตให้ผู้ใช้เขียนโปรแกรมที่ฟังก์ชัน ประเภท และเหตุการณ์ของ JavaScript และ Python สามารถทำงานร่วมกันได้ และ (เท่าที่เป็นไปได้) สามารถใช้พื้นที่จัดเก็บหน่วยความจำร่วมกันได้[ 39 ]
- เว็บเบราว์เซอร์แบบข้อความELinksใช้ SpiderMonkey เพื่อรองรับ JavaScript [ 40 ]
- บางส่วนของ SpiderMonkey ถูกนำมาใช้ในJScript (re-)implementation ของโครงการWine [ 41 ]
- Synchronetคือระบบ BBS, อีเมล, เว็บ และแอปพลิเคชันเซิร์ฟเวอร์ที่ใช้เอนจิน SpiderMonkey
- JavaScript OSA ภาษา สำหรับการสื่อสารระหว่างกระบวนการ (Inter-Process Communication ) ของ SpiderMonkey สำหรับคอมพิวเตอร์Mac
- 0 ADเกมวางแผนแบบเรียลไทม์
- Wasmer ได้รวม SpiderMonkey เข้ากับโครงการโอเพนซอร์ส WinterJS ของพวกเขา ซึ่งเป็นสภาพแวดล้อมการทำงานของ JavaScript
- SpiderMonkey ยังถูกใช้ในโครงการโอเพนซอร์สอื่นๆ อีกมากมาย โดยมีการรวบรวมรายชื่อภายนอกไว้ในเว็บไซต์สำหรับนักพัฒนาของ Mozilla [ 42 ]
SpiderMonkey มี JavaScript Shell สำหรับการพัฒนา JavaScript แบบโต้ตอบและสำหรับการเรียกใช้ไฟล์โปรแกรม JavaScript จากบรรทัดคำสั่ง[ 43 ]
ดูเพิ่มเติม
ลิงก์ภายนอก
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ สไปเดอร์มังกี้
SpiderMonkey เป็น เอ็นจิ้น JavaScript และ WebAssembly แบบโอเพนซอร์สโดย Mozilla Foundation [ 4 ] เอ็นจิ้นนี้ขับเคลื่อนเว็บ เบราว์เซอร์ Firefox และใช้คอมไพเลอร์ JavaScript แบบ...
ประวัติศาสตร์
ในปี 1995 Eich "เขียน JavaScript เสร็จภายในสิบวัน" [ 5 ] โดย "ได้รับการว่าจ้างให้ทำงานที่ Netscape ด้วยคำสัญญาว่าจะ 'เขียน Scheme ' ในเบราว์เซอร์" [ 6 ] (แนวคิดในการใช้ Scheme ถูกยกเลิกเมื่อ "ฝ่ายบริหารด้านวิศวกรรม [ตัดสินใจ] ว่าภาษาต้อง 'ดูเหมือน Java ' ) [...
เวอร์ชัน
ประวัติเวอร์ชันของ SpiderMonkey เวอร์ชั่น วันที่วางจำหน่าย เวอร์ชัน ECMAScript เวอร์ชันเบราว์เซอร์ เพิ่มฟังก์ชันการทำงาน [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] ไม่รองรับ: 1.0 (มอคค่า) กันยายน พ.ศ. 2538 [ 8 ] Netscape Navigator 2.
มาตรฐาน
SpiderMonkey ใช้ข้อกำหนด ECMA-262 ( ECMAScript ) ECMA-357 ( ECMAScript สำหรับ XML (E4X)) ถูกยกเลิกในช่วงต้นปี 2556 [ 24 ]