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

‫JavaScript Promise Integration (JSPI) هي واجهة برمجة تطبيقات تتيح للرمز المتزامن التسلسلي الذي تم تجميعه إلى WebAssembly الوصول إلى واجهات برمجة تطبيقات الويب غير المتزامنة. يتم تصميم العديد من واجهات برمجة التطبيقات على الويب باستخدام الوعود في JavaScript: بدلاً من تنفيذ العملية المطلوبة على الفور، يتم عرض وعد بتنفيذها. وعند تنفيذ الإجراء أخيرًا، يستدعي مشغّل المهام في المتصفّح أيّ دوال رد اتصال مع الوعد. تتكامل JSPI مع هذه البنية للسماح بتعليق تطبيق WebAssembly عند عرض الوعد، واستئنافه عند حلّ الوعد.

من الإصدار 123 من Chrome إلى الإصدار 128، تتوفّر واجهة برمجة التطبيقات JSPI كتجربة أصل. يمكنك الاطّلاع على مزيد من المعلومات عن JSPI في مشاركة المدوّنة Introducing the 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 مع مستخدمين حقيقيين لتطبيقك، عليك الاشتراك في التجربة الأصلية. يمكنك الاطّلاع على كيفية بدء استخدام التجارب الأصلية إذا كنت بحاجة إلى تعليمات. يتطلّع فريق JSPI إلى تلقّي ملاحظاتك حول التجربة الأصلية (راجِع الخطوة 5 في التعليمات) حتى تتناسب الميزة مع احتياجاتك عند طرحها.