Перейти к основному содержимому

WebAssembly JSPI выходит на этап внутреннего тестирования

· 3 мин. чтения
Фрэнсис МакКейб, Тибо Мишо, Илья Резвов, Брендан Даль

JavaScript Promise Integration (JSPI) API для WebAssembly входит в этап внутреннего тестирования с выпуском Chrome версии M123. Это означает, что вы можете протестировать, принесли ли вы и ваши пользователи пользу от этого нового API.

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

Вы можете узнать больше о JSPI и о том, как его использовать, здесь, а саму спецификацию — здесь.

Требования

Помимо регистрации для этапа внутреннего тестирования, вам также потребуется сгенерировать соответствующий WebAssembly и JavaScript. Если вы используете Emscripten, это просто. Убедитесь, что вы используете как минимум версию 3.1.47.

Регистрация для этапа внутреннего тестирования

JSPI все еще находится в стадии предварительного релиза; он проходит процесс стандартизации и не будет полностью выпущен, пока мы не дойдем до этапа 4 этого процесса. Чтобы использовать его уже сегодня, вы можете установить флаг в браузере Chrome, либо подать заявку на получение токена для этапа внутреннего тестирования, который позволит вашим пользователям получить доступ к нему без необходимости самостоятельно устанавливать флаг.

Для регистрации пройдите сюда и убедитесь в правильности выполнения процесса регистрации. Чтобы узнать больше о внутреннем тестировании в целом, эта страница будет хорошей отправной точкой.

Некоторые возможные ограничения

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

Кроме того, есть несколько известных проблем, которые, вероятно, не будут полностью решены на этапе внутреннего тестирования:

Для приложений, которые активно создают вычисления с разделением задач, производительность обернутой последовательности (т.е. использование JSPI для доступа к асинхронному API) может снижаться. Это связано с тем, что ресурсы, используемые при создании вызова, не кэшируются между вызовами; мы полагаемся на сборщик мусора для очистки созданных стеков. В настоящее время мы выделяем фиксированный размер стека для каждого обернутого вызова. Этот стек должен быть достаточно большим, чтобы удовлетворять потребностям сложных приложений. Однако это также означает, что приложение с большим количеством простых обернутых вызовов, выполняющихся одновременно, может столкнуться с проблемами памяти.

Ни одна из этих проблем, вероятно, не помешает экспериментировать с JSPI; ожидается, что они будут решены до официального выпуска JSPI.

Обратная связь

Поскольку JSPI является частью процесса стандартизации, мы предпочитаем, чтобы любые проблемы и обратная связь были оставлены здесь. Однако сообщения об ошибках можно отправить через стандартный сайт отчетов об ошибках Chrome здесь. Если вы подозреваете проблему с генерацией кода, используйте этот инструмент для ее сообщения.

Наконец, нам бы хотелось узнать о любых обнаруженных вами преимуществах. Используйте трекер проблем, чтобы поделиться своим опытом.