• สรุปผลงานการปรับปรุงที่น่าประทับใจของเอนจิน V8 ในปี 2023
  • เพิ่มความเร็วโดยรวมผ่านการนำคอมไพเลอร์ขั้นกลางตัวใหม่มาใช้ และการปรับปรุงคอมไพเลอร์ขั้นบน รันไทม์ และ garbage collector
  • เพิ่มฟีเจอร์ใหม่สำหรับ JavaScript และ WebAssembly และนำภาษาโปรแกรมที่มี garbage collection มาสู่เว็บอย่างมีประสิทธิภาพด้วย WebAssembly garbage collection (WasmGC)
  • ปรับปรุงโครงสร้างพื้นฐานด้าน sandboxing เพื่อเพิ่มความปลอดภัย และนำ control-flow integrity (CFI) มาใช้ใน V8

Maglev: คอมไพเลอร์เพิ่มประสิทธิภาพขั้นกลางตัวใหม่

  • เปิดตัวคอมไพเลอร์เพิ่มประสิทธิภาพตัวใหม่ Maglev ซึ่งทำงานอยู่ระหว่าง Sparkplug และ TurboFan
  • Maglev สร้างโค้ดช้ากว่า Sparkplug ราว 20 เท่า แต่ยังสร้างโค้ดได้เร็วกว่า TurboFan 10–100 เท่า
  • พบว่าประสิทธิภาพดีขึ้น 8.2% บน JetStream และ 6% บน Speedometer
  • ความเร็วในการคอมไพล์ของ Maglev ที่สูงขึ้นและการพึ่งพา TurboFan ที่ลดลงช่วยประหยัดพลังงาน

Turboshaft: โครงสร้างใหม่ของคอมไพเลอร์เพิ่มประสิทธิภาพขั้นบน

  • นำ Turboshaft ซึ่งเป็นโครงสร้างภายในใหม่ของคอมไพเลอร์เพิ่มประสิทธิภาพขั้นบน TurboFan มาใช้
  • เพิ่ม optimization ใหม่ได้ และคอมไพล์ได้เร็วขึ้น
  • ตั้งแต่ Chrome 120 เป็นต้นไป ขั้นตอนแบ็กเอนด์ทั้งหมดที่ไม่ขึ้นกับ CPU ใช้ Turboshaft ทำให้คอมไพล์เร็วขึ้นราว 2 เท่าเมื่อเทียบกับเดิม

ตัวแยกวิเคราะห์ HTML ที่เร็วขึ้น

  • เพิ่มตัวแยกวิเคราะห์ HTML ที่เร็วขึ้นให้กับ Blink เพื่อลดเวลาที่ใช้ในการ parse HTML
  • คะแนน Speedometer เพิ่มขึ้น 3.4%
  • โปรเจ็กต์ WebKit ได้นำการเปลี่ยนแปลงนี้ไปรวมทันที

การจัดสรร DOM ที่เร็วขึ้น

  • ลงทุนและทำ optimization ในฝั่ง DOM
  • เพิ่ม page pool ให้กับตัวจัดสรร Oilpan เพื่อลดค่าใช้จ่ายจากการไปกลับกับเคอร์เนล
  • รองรับทั้ง pointer แบบบีบอัดและไม่บีบอัด และหลีกเลี่ยงการบีบอัดฟิลด์ที่ถูกใช้งานบ่อยใน Blink
  • ทำ oilpanization ให้กับคลาสที่มีการจัดสรรบ่อย ทำให้งานจัดสรรเร็วขึ้น 3 เท่า และช่วยเพิ่มประสิทธิภาพในเบนช์มาร์กที่เน้น DOM

ฟีเจอร์ JavaScript ใหม่

  • เปิดใช้งานฟีเจอร์ JavaScript ที่เพิ่งผ่านการมาตรฐาน
  • เพิ่ม resizable ArrayBuffers, ArrayBuffer transfer, String isWellFormed และ toWellFormed, แฟลก v ของ RegExp, JSON.parse with source, Array grouping, Promise.withResolvers, Array.fromAsync เป็นต้น
  • ฟีเจอร์ตัวช่วย Iterator ถูกถอนออกชั่วคราวเนื่องจากปัญหาความเข้ากันได้กับเว็บ และจะนำกลับมาเปิดใช้อีกครั้งภายหลัง
  • ละเว้นการตรวจสอบ temporal dead zone ชั่วคราวบางส่วนที่ไม่จำเป็น เพื่อเพิ่มประสิทธิภาพของโค้ด JavaScript แบบ ES6+

อัปเดต WebAssembly

  • เพิ่มฟีเจอร์ใหม่และปรับปรุงประสิทธิภาพสำหรับ Wasm
  • เพิ่มประสิทธิภาพด้วยการรองรับ multi-memory, tail calls และ relaxed SIMD
  • การติดตั้งใช้งาน memory64 เสร็จสมบูรณ์แล้ว และจะเปิดใช้งานเมื่อข้อเสนอเข้าสู่ขั้นที่ 4
  • สะท้อนอัปเดตล่าสุดของข้อเสนอด้าน exception handling และรองรับฟอร์แมตก่อนหน้า
  • ลงทุนใน JSPI เพื่อเปิดทางให้แอปพลิเคชันบนเว็บที่มีขนาดและความซับซ้อนมากขึ้น

WebAssembly garbage collection

  • การเปิดใช้งาน WasmGC ทำให้สามารถจัดสรรอ็อบเจ็กต์และอาร์เรย์ที่ถูกจัดการโดย garbage collector เดิมของ V8 ได้
  • เมื่อคอมไพล์แอปพลิเคชันที่เขียนด้วยภาษาแบบ garbage-collected เช่น Java, Kotlin และ Dart ไปเป็น Wasm จะรันได้เร็วขึ้นราว 2 เท่าเมื่อเทียบกับการคอมไพล์เป็น JavaScript

ความปลอดภัย

  • sandboxing, fuzzing และ CFI คือประเด็นด้านความปลอดภัยหลักของปีนี้
  • สร้างโครงสร้างพื้นฐานสำหรับ sandboxing ลงทุนในโครงสร้างพื้นฐานด้าน fuzzing และปรับปรุงการครอบคลุมของภาษา
  • วางรากฐานสถาปัตยกรรม CFI และพร้อมนำไปใช้งานได้บนหลายแพลตฟอร์ม
  • บรรเทาเทคนิคการโจมตีที่เป็นที่นิยมรอบ the_hole และเริ่มโครงการเงินรางวัลช่องโหว่รูปแบบใหม่ในชื่อ V8CTF

บทสรุป

  • ผลรวมของโครงการปรับปรุงประสิทธิภาพขนาดเล็กหลายโครงการก่อให้เกิดผลลัพธ์ที่มีนัยสำคัญ
  • คะแนนเบนช์มาร์กที่แสดงถึงประสิทธิภาพของ V8 ในปี 2023 เติบโต 14% บน JetStream และ 34% บน Speedometer
  • ตอนนี้ V8 ทั้งเร็วขึ้นและปลอดภัยขึ้น และการเดินทางสู่เว็บที่เร็วและดุดันเพิ่งเริ่มต้นเท่านั้น
  • ทีม V8 ขอให้ทุกคนมีประสบการณ์การท่องเว็บที่รวดเร็ว ปลอดภัย และยอดเยี่ยม

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น