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

JavaScript Promise Integration (JSPI) הוא API שמאפשר הידור של קוד רציף סינכרוני שנוצר ל-WebAssembly כדי לגשת לממשקי API אסינכרוניים. הרבה ממשקי 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 בהוראות) כדי שהתכונה תתאים לצרכים שלכם לאחר שליחתה.