WebAssembly JavaScript Promise Integration (JSPI) beginnt im Ursprungstest

Die JavaScript Promise Integration (JSPI) ist eine API, die synchronen sequenziellen Code, der in WebAssembly kompiliert wurde, den Zugriff auf asynchrone Web APIs ermöglicht. Viele Web APIs sind in Bezug auf JavaScript-Promise-Objekte entwickelt. Anstatt den angeforderten Vorgang sofort auszuführen, geben sie ein Promise zurück. Wenn die Aktion schließlich ausgeführt wird, ruft der Task-Runner des Browsers alle Callbacks mit dem Promise auf. Je nach Art der Architektur lässt sich wählen, dass eine WebAssembly-Anwendung angehalten und fortgesetzt werden soll, wenn das Promise aufgelöst wird.

Von Chrome 123 bis Chrome 128 ist JSPI als Ursprungstest verfügbar. Weitere Informationen zu JSONI finden Sie im Blogpost Einführung in die WebAssembly JavaScript Promise Integration API oder im Spezifikationsentwurf.

Für ein besseres Verständnis der Verwendung dieser Funktion betrachten Sie den folgenden Auszug eines C-Programms, das die Fibonacci-Folge durch Auslagern der Ergänzung zu einer JavaScript-Funktion berechnet.

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

Verwenden Sie den folgenden Befehl, um dieses C-Programm in WebAssembly zu kompilieren. Dafür ist das Emscripten SDK erforderlich.

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

So können Sie die JSPI-Unterstützung über JavaScript erkennen:

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

Eine Demo von JSONI aus dem vorherigen Codebeispiel ist auf Glitch verfügbar und auch in den folgenden enthalten. Sie können den von Emscripten generierten Quellcode sehen. Interessant ist jedoch, dass der Code das ursprüngliche C-Programm ist. Wenn Sie auf diesen Link klicken, wird der Code heruntergeladen.

Wenn Sie JSONI mit echten Nutzern Ihrer Anwendung testen möchten, registrieren Sie sich für den Ursprungstest. Weitere Informationen finden Sie unter Erste Schritte mit Ursprungstests. Das JSPI-Team freut sich auf das Feedback Ihres Ursprungstests (siehe Schritt 5 in der Anleitung), damit die Funktion bei Auslieferung Ihren Anforderungen entspricht.