تدخل تقنية WebAssembly JavaScript Promise Integration (JSPI) في مرحلة التجربة والتقييم.

JavaScript Promise Integration (JSPI) هي واجهة برمجة تطبيقات تتيح رمزًا تسلسليًا متزامنًا تم تجميعه في WebAssembly للوصول إلى واجهات برمجة تطبيقات الويب غير المتزامنة. تمت صياغة العديد من واجهات برمجة تطبيقات الويب استنادًا إلى وعود JavaScript: فبدلاً من تنفيذ العملية المطلوبة على الفور، تتعهد المستخدم بتنفيذ ذلك. وعندما يتم تنفيذ الإجراء في النهاية، يستدعي برنامج تشغيل المهام في المتصفح أي استدعاءات تتضمن وعودًا بذلك. يعتمد 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 في التعليمات) كي تكون الميزة مناسبة لاحتياجاتك عند شحنها.