WebAssembly JavaScript Promise Integration (JSPI) beginnt im Ursprungstest

JSPI (JavaScript Promise Integration) ist eine API, mit der synchroner sequenzieller Code, der in WebAssembly kompiliert wurde, auf asynchrone Web-APIs zugreifen kann. Viele Web-APIs sind in Form von JavaScript-Promises konzipiert: Anstatt die angeforderte Operation 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 wird in diese Architektur eingebunden, damit eine WebAssembly-Anwendung angehalten werden kann, wenn das Promise zurückgegeben wird, und fortgesetzt werden kann, wenn das Promise aufgelöst 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 oder im Spezifikationsentwurf.

Das folgende C-Programmbeispiel veranschaulicht die Verwendung dieser Funktion. Es berechnet die Fibonacci-Folge, 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);
});

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

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

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

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

Eine Demo von JSPI aus dem vorherigen Codebeispiel ist auf Glitch verfügbar und auch unten eingebettet. Sie können sich den von Emscripten generierten Quellcode ansehen, wenn Sie möchten. Der wirklich interessante Code ist jedoch 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, melden Sie sich für den Ursprungstest an. Eine Anleitung finden Sie unter Erste Schritte mit Origin Trials. Das JSPI-Team freut sich auf Ihr Feedback zum Ursprungstest (siehe Schritt 5 in der Anleitung), damit die Funktion bei der Einführung Ihren Anforderungen entspricht.