WebAssembly JavaScript Promise Integration (JSPI) beginnt im Ursprungstest

Die JavaScript Promise Integration (JSPI) ist eine API, die es ermöglicht, mithilfe von synchronem sequenziellem Code, der in WebAssembly kompiliert wurde, auf asynchrone Web-APIs zuzugreifen. Viele Web-APIs sind in JavaScript-Promises geschrieben: Anstatt den angeforderten Vorgang sofort auszuführen, geben sie ein Promise zurück, um dies zu tun. Wenn die Aktion schließlich ausgeführt wird, ruft der Task-Runner des Browsers alle Callbacks mit dem Promise auf. JSPI greift auf diese Architektur zurück, um eine WebAssembly-Anwendung anzuhalten, wenn das Versprechen zurückgegeben wird, und fortzusetzen, wenn das Versprechen erfüllt wird.

Von Chrome 123 bis Chrome 128 ist JSPI als Ursprungstest verfügbar. Weitere Informationen zu JSPI finden Sie im Blogpost Introducing the WebAssembly JavaScript Promise Integration API (WebAssembly JavaScript Promise Integration API) oder im Entwurf der Spezifikation.

Um die Verwendung dieser Funktion besser zu verstehen, sehen Sie sich den folgenden Ausschnitt aus einem C-Programm an, in dem die Fibonacci-Folge berechnet wird, indem die Addition an eine JavaScript-Funktion ausgelagert wird.

// 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);
});

Um dieses C-Programm in WebAssembly zu kompilieren, verwenden Sie den folgenden Befehl, für den das Emscripten SDK erforderlich ist.

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

So kannst du die JSPI-Unterstützung in JavaScript prüfen:

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

Eine Demo von JSPI aus dem vorherigen Codebeispiel ist auf Glitch und auch unten eingebettet. Sie können sich den von Emscripten generierten Quellcode ansehen, aber der wirklich interessante Code ist das ursprüngliche C-Programm. Wenn Sie auf diesen Link klicken, wird der Code heruntergeladen.

Wenn Sie JSPI mit echten Nutzern Ihrer Anwendung testen möchten, registrieren Sie sich für den Origin-Test. Eine Anleitung finden Sie im Hilfeartikel Erste Schritte mit Ursprungstests. Das JSPI-Team freut sich auf dein Feedback zum Test (siehe Schritt 5 in der Anleitung), damit die Funktion bei der Veröffentlichung deinen Anforderungen entspricht.