WebAssembly JavaScript Promise Integration (JSPI) entra a la prueba de origen

La integración de promesas de JavaScript (JSPI) es una API que permite que el código secuencial síncrono compilado en WebAssembly acceda a las APIs web asíncronas. Muchas APIs web se crean en términos de promesas de JavaScript: en lugar de realizar la operación solicitada de inmediato, muestran una promesa para hacerlo. Cuando la acción finalmente se realiza, el ejecutor de tareas del navegador invoca cualquier devolución de llamada con la promesa. JSPI se conecta a esta arquitectura para permitir que una aplicación WebAssembly se suspenda cuando se muestra la promesa y se reanuda cuando esta se resuelve.

De Chrome 123 a Chrome 128, JSPI está disponible como prueba de origen. Obtén más información sobre JSPI en la entrada de blog Presentación de la API de integración de promesas de JavaScript de WebAssembly o en el borrador de especificación.

Para comprender mejor cómo usar esta función, considera el siguiente extracto de un programa en C que calcula la secuencia de Fibonacci mediante la subcontratación de la adición a una función de 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);
});

Para compilar este programa C en WebAssembly, usa el siguiente comando, que requiere el SDK de Emscripten.

emcc -O3 badfib.c -o index.html -s ASYNCIFY=2

Puedes detectar la compatibilidad con JSPI en JavaScript de la siguiente manera:

if ('Suspender' in WebAssembly) {
  // JSPI is supported.
}

Hay una demostración de JSPI de la muestra de código anterior que está disponible en Glitch y también está incorporada en lo siguiente. Puedes ver el código fuente generado por Emscripten si lo deseas, pero el código realmente interesante es el programa C original (si haces clic en este vínculo, se descargará el código).

Para probar JSPI con usuarios reales de tu aplicación, regístrate en la prueba de origen. Lee Comienza a usar las pruebas de origen si necesitas instrucciones. El equipo de JSPI espera recibir tus comentarios sobre la prueba de origen (consulta el Paso 5 en las instrucciones) para que la función se adapte a tus necesidades durante el envío.