JSPI (JavaScript Promise Integration) è un'API che consente al codice sequenziale sincrono compilato in WebAssembly di accedere alle API web asincrone. Molte API web sono progettate in termini di promise JavaScript: invece di eseguire immediatamente l'operazione richiesta, restituiscono una promessa per farlo. Quando l'azione viene finalmente eseguita, il task runner del browser invoca eventuali callback con la promessa. JSPI si inserisce in questa architettura per consentire di sospendere un'applicazione WebAssembly quando viene restituita la promessa e di riprenderla quando la promessa viene risolta.
Da Chrome 123 a Chrome 128, JSPI è disponibile come prova dell'origine. Scopri di più su JSPI nel post del blog Introduzione all'API WebAssembly JavaScript Promise Integration o nella bozza delle specifiche.
Per comprendere meglio come utilizzare questa funzionalità, considera il seguente estratto di un programma C che calcola la sequenza di Fibonacci esternalizzando la somma a una funzione 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);
});
Per compilare questo programma C in WebAssembly, utilizza il seguente comando, che richiede l'SDK Emscripten.
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
Puoi rilevare le funzionalità del supporto JSPI da JavaScript nel seguente modo:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
Una demo di JSPI dall'esempio di codice precedente è disponibile su Glitch ed è incorporata anche nel seguente. Se vuoi, puoi visualizzare il codice sorgente generato da Emscripten, ma il codice effettivamente interessante è il programma C originale (facendo clic su questo link verrà scaricato il codice).
Per provare JSPI con utenti reali della tua applicazione, registrati alla prova dell'origine. Leggi la pagina Inizia a utilizzare le prove dell'origine se hai bisogno di istruzioni. Il team JSPI è ansioso di ricevere il tuo feedback sulla prova iniziale (vedi Passaggio 5 nelle istruzioni) in modo che la funzionalità soddisfi le tue esigenze al momento del lancio.