WebAssembly JavaScript Promise Integration (JSPI) เข้าสู่ช่วงทดลองใช้จากต้นทาง

JavaScript Promise Integration (JSPI) เป็น API ที่ทำงานแบบซิงโครนัส โค้ดตามลำดับซึ่งคอมไพล์ไปยัง WebAssembly เพื่อเข้าถึง Web API แบบอะซิงโครนัส หลายหน้า Web API สร้างขึ้นด้วย JavaScript สัญญา: แทนที่จะดำเนินการตามที่ขอโดยทันที พวกเขาจะให้คำมั่นสัญญา ให้ทำเช่นนั้นได้ เมื่อการทำงานเสร็จสมบูรณ์ ตัวเรียกใช้งานของเบราว์เซอร์ จะเรียก Callback ที่มีคำสัญญา JSPI เชื่อมโยงเข้ากับสถาปัตยกรรมนี้เพื่อ อนุญาตให้ระงับแอปพลิเคชัน WebAssembly เมื่อมีการส่งคืนสัญญา และทำให้กลับมาแสดงอีกครั้งเมื่อสัญญาสำเร็จ

ตั้งแต่ Chrome 123 จนถึง Chrome 128 JSPI มีให้บริการเป็นช่วงทดลองใช้จากต้นทาง ดูข้อมูลเพิ่มเติมเกี่ยวกับ JSPI ในบล็อกโพสต์ ขอแนะนำ WebAssembly JavaScript Promise Integration API หรือจาก ฉบับร่างข้อกำหนด

โปรดพิจารณาสิ่งต่อไปนี้เพื่อให้เข้าใจมากขึ้นถึงวิธีใช้ฟีเจอร์นี้ ที่ตัดตอนมาจากโปรแกรม C ที่คำนวณลำดับฟีโบนักชีโดยการเรียก นอกเหนือจากฟังก์ชัน JavaScript

// This is C code.
long promiseFib(long x) {
  if (x == 0)
    return 0;
  if (x == 1)
    return 1;
  // This is where the C code calls asynchronous JavaScript.
  return promiseAdd(promiseFib(x - 1), promiseFib(x - 2));
}

// Addition artificially wrapped in a Promise.
EM_ASYNC_JS(long, promiseAdd, (long x, long y), {
  // This is asynchronous JavaScript code.
  return Promise.resolve(x+y);
});

หากต้องการคอมไพล์โปรแกรม C นี้เป็น WebAssembly ให้ใช้คำสั่งต่อไปนี้ ซึ่งต้องใช้ Emscripten SDK

emcc -O3 badfib.c -o index.html -s ASYNCIFY=2

คุณตรวจจับการรองรับ JSPI ด้วยฟีเจอร์จาก JavaScript ได้ดังนี้

if ('Suspender' in WebAssembly) {
  // JSPI is supported.
}

การสาธิต JSPI จากตัวอย่างโค้ดก่อนหน้านี้คือ ใน Glitch และยังฝังลงใน กำลังติดตาม คุณสามารถดูระบบที่ Emscripten สร้างขึ้น ซอร์สโค้ด หาก ที่คุณต้องการ แต่โค้ดที่น่าสนใจจริงๆ ก็คือ โปรแกรม C เวอร์ชันเดิม (การคลิกลิงก์นี้จะเป็นการดาวน์โหลดโค้ด)

หากต้องการทดลองใช้ JSPI กับผู้ใช้แอปพลิเคชันจริง ลงชื่อสมัครใช้ช่วงทดลองใช้จากต้นทาง โปรดอ่านเริ่มต้นใช้งานช่วงทดลองใช้จากต้นทางหากคุณ ต้องการคำแนะนำ ทีม JSPI หวังว่าจะได้รับความคิดเห็นจากคุณเกี่ยวกับเวอร์ชันทดลองใช้เวอร์ชันแรก (ดูขั้นตอนที่ 5 ในวิธีการ) เพื่อให้ฟีเจอร์นี้ตรงกับความต้องการของคุณเมื่อเปิดตัว