WebAssembly JavaScript Promise Integration (JSPI) вступает в пробную версию

JavaScript Promise Integration (JSPI) — это API, который позволяет синхронному последовательному коду, скомпилированному в WebAssembly, получать доступ к асинхронным веб-API. Многие веб-API созданы в терминах обещаний JavaScript: вместо того, чтобы немедленно выполнить запрошенную операцию, они возвращают обещание сделать это. Когда действие наконец выполняется, обработчик задач браузера вызывает любые обратные вызовы с обещанием. JSPI подключается к этой архитектуре, чтобы позволить приостановить приложение WebAssembly, когда обещание возвращается, и возобновить его, когда обещание разрешается.

От Chrome 123 до Chrome 128 JSPI доступен в качестве пробной версии origin . Узнайте больше о JSPI в записи блога Знакомство с API интеграции JavaScript Promise WebAssembly или из проекта спецификации .

Чтобы лучше понять, как использовать эту функцию, рассмотрим следующий фрагмент программы на языке C, которая вычисляет последовательность Фибоначчи путем аутсорсинга сложения с функцией 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);
});

Чтобы скомпилировать эту программу на языке C в WebAssembly, используйте следующую команду, для которой требуется Emscripten SDK .

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

Вы можете обнаружить поддержку JSPI из JavaScript следующим образом:

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

Демонстрация JSPI из предыдущего примера кода доступна на Glitch , а также встроена в следующий. Вы можете увидеть исходный код , сгенерированный Emscripten, если хотите, но на самом деле интересный код — это оригинальная программа на C (клик по этой ссылке загрузит код).

Чтобы опробовать JSPI с реальными пользователями вашего приложения, зарегистрируйтесь на пробную версию Origin . Прочтите раздел Начало работы с пробными версиями Origin, если вам нужны инструкции. Команда JSPI с нетерпением ждет ваших отзывов о пробной версии Origin (см. Шаг 5 в инструкциях), чтобы функция соответствовала вашим потребностям, когда она будет выпущена!