La phase d'évaluation de l'intégration de WebAssembly JavaScript Promise (JSPI)

L'intégration de promesses JavaScript (JSPI) est une API qui permet au code séquentiel synchrone compilé en WebAssembly d'accéder aux API Web asynchrones. De nombreuses API Web sont conçues en termes de promesses JavaScript : au lieu d'effectuer immédiatement l'opération demandée, elles renvoient une promesse de le faire. Lorsque l'action est enfin effectuée, le gestionnaire de tâches du navigateur appelle les rappels avec la promesse. JSPI s'intègre à cette architecture pour permettre la suspension d'une application WebAssembly lorsque la promesse est renvoyée et sa reprise lorsque la promesse est résolue.

De Chrome 123 à Chrome 128, JSPI est disponible en tant qu'évaluation de l'origine. Pour en savoir plus sur JSPI, consultez l'article de blog Présentation de l'API d'intégration des promesses JavaScript WebAssembly ou le brouillon de spécification.

Pour mieux comprendre comment utiliser cette fonctionnalité, examinez l'extrait suivant d'un programme C qui calcule la séquence de Fibonacci en sous-traitant l'addition à une fonction 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);
});

Pour compiler ce programme C en WebAssembly, utilisez la commande suivante, qui nécessite le SDK Emscripten.

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

Vous pouvez détecter la compatibilité JSPI à partir de JavaScript comme suit :

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

Pour essayer JSPI avec de vrais utilisateurs de votre application, inscrivez-vous à l'Origin Trial. Pour obtenir des instructions, consultez Premiers pas avec les versions d'essai d'origine. L'équipe JSPI a hâte de recevoir vos commentaires sur l'Origin Trial (voir l'étape 5 des instructions) afin que la fonctionnalité réponde à vos besoins lors de son lancement.