- ทีม Google Sheets ได้ร่วมมือกันอย่างต่อเนื่องหลังจากประกาศการใช้ WasmGC ใน Chrome เมื่อปี 2022
- สิ่งนี้ได้สร้างบรรทัดฐานให้แอปของ Google สามารถรันบน WasmGC ได้
- ปัญหา: JavaScript
- เอนจินการคำนวณของ Google Sheets เดิมเขียนด้วย Java และเปิดตัวในปี 2006 โดยการคำนวณทั้งหมดเกิดขึ้นบนเซิร์ฟเวอร์
- ตั้งแต่ปี 2013 ได้รันในเบราว์เซอร์โดยใช้ JavaScript
- ช่วงแรกใช้ Google Web Toolkit (GWT) และภายหลังใช้ Java to Closure JavaScript transpiler (J2CL)
- เอนจินการคำนวณเวอร์ชัน JavaScript รันอยู่ใน Web Worker และสื่อสารกับเธรดหลักผ่าน
MessageChannel
- เวอร์ชัน JavaScript ช้ากว่าเวอร์ชัน Java มากกว่า 3 เท่า
- เหตุผลที่ JavaScript ช้ากว่า Java
- JavaScript เป็นภาษาแบบไดนามิก แม้ JIT compiler จะช่วยเพิ่มประสิทธิภาพได้ แต่ก็ยังมีข้อจำกัด
- การพิมพ์แบบหลวมและพฤติกรรมแบบไดนามิกทำให้สร้างโค้ดที่เหมาะสมที่สุดได้ยาก
- TypeScript ช่วยให้พัฒนาได้ง่ายขึ้น แต่ไม่ได้ให้การรับประกันที่จำเป็นต่อการทำ optimization
- ทางออก: WasmGC
- ส่วนขยายของ WebAssembly ที่เพิ่มความสามารถซึ่งจำเป็นต่อการคอมไพล์ภาษาแบบ garbage-collected
- ทำให้ภาษาต่าง ๆ เช่น Java สามารถรันบนเว็บได้ด้วยความเร็วใกล้เคียง native
- คาดว่าจะมีอิทธิพลมากกว่า Wasm สำหรับ C++ เสียอีก
- ความร่วมมือระหว่าง Google Workspace และ Chrome
- เริ่มร่วมมือกันตั้งแต่ปลายปี 2020 เพื่อประเมิน WasmGC
- เลือกเอนจินการคำนวณของ Sheets เป็นเป้าหมายทดสอบที่เหมาะสมที่สุด
- ทีม V8 และผู้มีส่วนร่วมใน Binaryen (ชุดเครื่องมือสำหรับ optimization ของ WASM) รับผิดชอบด้านรันไทม์ WasmGC และ optimization แบบ AOT
- กระบวนการ optimization
- เวอร์ชันแรกช้ากว่า JavaScript ถึง 2 เท่า แต่ยังคงมีการ optimization อย่างต่อเนื่อง
- จำลองเทคนิค optimization หลักของ JVM และ V8 (เพียงแค่นำ virtual method dispatch, speculative inlining และ devirtualization มาใช้ ก็เพิ่มความเร็วได้ 40%)
- ใช้ Browser API ที่ผ่านการ optimization อย่างสูง (เช่น การประมวลผล regular expression เร็วขึ้น 100 เท่า)
- ลบรูปแบบการเขียนโค้ดที่ออกแบบมาเฉพาะสำหรับ JavaScript
- บทสรุป
- WasmGC เป็นเทคโนโลยีที่มีศักยภาพในการพัฒนาวิธีสร้างเว็บแอปพลิเคชัน
- ในอนาคตคาดว่า WasmGC จะรองรับ shared-memory multithreading และเพิ่มประสิทธิภาพแบบ single-thread
- แนะนำให้นักพัฒนาเว็บทุกคนใช้ WasmGC สำหรับโปรเจ็กต์ที่ต้องการประสิทธิภาพสูง
2 ความคิดเห็น
เป็นกรณีศึกษาที่น่าสนใจทีเดียว
สรุปแล้วในบทความนี้ไม่ได้พูดถึงว่าการพอร์ตจาก JavaScript ไปเป็น WasmGC ทำให้เร็วขึ้นแค่ไหน แต่ถ้าดูจากบทความด้านล่าง ระบุว่าเร็วขึ้น 2 เท่า
Doubling calculation speed and other new innovations in Google Sheets
อ้างอิง: WebAssembly garbage collection (WasmGC) พร้อมเปิดใช้งานเป็นค่าเริ่มต้นใน Chrome แล้ว