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