Integracja JavaScriptu WebAssembly (JSPI) rozpoczyna testowanie origin

JavaScript Promise Integration (JSPI) to interfejs API, który umożliwia synchronicznemu sekwencyjnemu kodowi skompilowanemu do WebAssembly dostęp do asynchronicznych interfejsów Web API. Wiele interfejsów API sieci jest tworzonych w formie obietnic JavaScriptu: zamiast natychmiast wykonywać żądaną operację, zwracają obietnicę jej wykonania. Gdy działanie zostanie w końcu wykonane, narzędzie do wykonywania zadań w przeglądarce wywołuje wszystkie wywołania zwrotne z obietnicą. JSPI wykorzystuje tę architekturę, aby umożliwić zawieszenie aplikacji WebAssembly po zwróceniu obietnicy i wznowienie jej działania po rozwiązaniu obietnicy.

Od Chrome 123 do Chrome 128 JSPI jest dostępny w ramach wersji próbnej origin. Więcej informacji o JSPI znajdziesz w poście na blogu Introducing the WebAssembly JavaScript Promise Integration API lub w projekcie specyfikacji.

Aby lepiej zrozumieć, jak korzystać z tej funkcji, zapoznaj się z tym fragmentem programu w języku C, który oblicza ciąg Fibonacciego, zlecając dodawanie funkcji 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);
});

Aby skompilować ten program w języku C do WebAssembly, użyj tego polecenia, które wymaga pakietu Emscripten SDK.

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

Obsługę JSPI możesz wykryć w JavaScript w ten sposób:

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

Aby wypróbować JSPI z prawdziwymi użytkownikami aplikacji, zarejestruj się w programie testów źródła. Jeśli potrzebujesz instrukcji, przeczytaj artykuł Wprowadzenie do testów origin. Zespół JSPI czeka na Twoje opinie o okresie próbnym dotyczącym pochodzenia (patrz krok 5 w instrukcjach), aby dostosować tę funkcję do Twoich potrzeb, gdy zostanie udostępniona.