JavaScript Promise Integration (JSPI), WebAssembly'e derlenen sıralı senkronize kodun eşzamansız Web API'lerine erişmesine olanak tanıyan bir API'dir. Birçok Web API'si, JavaScript sözleşmeleri açısından tasarlanmıştır: istenen işlemi hemen gerçekleştirmek yerine, bunu yapmak için bir sözleşme döndürürler. İşlem sonunda gerçekleştirildiğinde, tarayıcının görev yürütücüsü, sözleşmeyle tüm geri çağırma işlevlerini çağırır. JSPI, bir WebAssembly uygulamasının söz döndürüldüğünde askıya alınmasına ve söz çözüldüğünde devam ettirilmesine izin vermek için bu mimariye bağlanır.
Chrome 123 ile Chrome 128 arasında JSPI, kaynak denemesi olarak kullanılabilir. JSPI hakkında daha fazla bilgiyi WebAssembly JavaScript Promise Integration API'yi tanıtıyoruz başlıklı blog yayınında veya özet taslakta bulabilirsiniz.
Bu özelliğin nasıl kullanılacağını daha iyi anlamak için aşağıdaki C programından alınan ve toplama işlemini bir JavaScript işlevine dış kaynak yaparak Fibonacci dizisini hesaplayan alıntıyı inceleyin.
// 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);
});
Bu C programını WebAssembly olarak derlemek için Emscripten SDK'sının gerekli olduğu aşağıdaki komutu kullanın.
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
JavaScript'te JSPI desteğini şu şekilde algılayabilirsiniz:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
Önceki kod örneğindeki JSPI demosunu Glitch'te ve aşağıdakine yerleştirilmiş olarak bulabilirsiniz. İsterseniz Emscripten tarafından oluşturulan kaynak kodunu görebilirsiniz ancak asıl ilginç olan kod orijinal C programıdır (bu bağlantıyı tıkladığınızda kod indirilir).
JSPI'yi uygulamanızın gerçek kullanıcılarıyla denemek için orijinal deneme sürümüne kaydolun. Talimatlara ihtiyacınız varsa Kaynak denemelerini kullanmaya başlama başlıklı makaleyi okuyun. JSPI ekibi, özelliğin kullanıma sunulduğunda ihtiyaçlarınıza uygun olması için ilk denemeyle ilgili geri bildiriminizi (talimatlar için 5. Adım'a bakın) bekliyor.