WebAssembly JavaScript Promise Integration (JSPI) נכנס לגרסת המקור לניסיון

JavaScript Promise Integration (JSPI) הוא API שמאפשר לבצע סנכרון סינכרוני קוד רציף שעבר הידור ל-WebAssembly כדי לגשת לממשקי Web API אסינכרוניים. הרבה ממשקי ה-API באינטרנט נוצרו במונחים של JavaScript הבטחות: במקום לבצע מיד את הפעולה המבוקשת, הם מחזירים הבטחה לעשות זאת. כשהפעולה מבוצעת בסופו של דבר, מנהל המשימות של הדפדפן מפעיל כל קריאה חוזרת (callback) לפי ההבטחה. JSPI מתחבר לארכיטקטורה הזו כדי מאפשרות השעיה של אפליקציית WebAssembly כשההבטחה מוחזרת, וכדי שההבטחה תתחדש.

מגרסה Chrome 123 עד גרסה Chrome 128, JSPI זמין כגרסת מקור לניסיון. מידע נוסף על JSPI זמין בפוסט בבלוג השקה של WebAssembly JavaScript Promise Integration API או בטיוטת המפרט.

כדי להבין טוב יותר איך משתמשים בתכונה הזו, תוכלו לעיין בקטע הבא מתוכנית C שמחשבת את רצף Fibonacci על ידי העברת שירותי הוספה אל פונקציית 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 הוראות), כדי שהתכונה תתאים לצרכים שלך בזמן המשלוח!