WebAssembly

Экспериментальная возможность: Это экспериментальная технология
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.

Объект JavaScript WebAssembly действует как пространство имён для всего WebAssembly-связанной функциональности.

В отличие от большинства других глобальных объектов, WebAssembly не является конструктором (это не объект функции). Можно сравнить его с Math, который так же является пространством имён констант и функций, или Intl, который является пространством имён для конструкторов интернационализации и других языково-чувствительных функций.

Описание

Основное использование WebAssembly следующее:

Методы

WebAssembly.instantiate() (en-US)

Основное API для компиляции и создания экземпляра кода WebAssembly, возвращающее Module и его первый Instance.

WebAssembly.compile()

Компилирует WebAssembly.Module (en-US) из бинарного кода WebAssembly, оставляя создание экземпляра отдельным шагом.

WebAssembly.validate() (en-US)

Проверяет представленный типизированный массив бинарного кода WebAssembly, возвращая в зависимости от того были ли байты кода WebAssembly валидны (true) или (false).

Конструкторы

WebAssembly.Module() (en-US)

Создаёт новый объект WebAssembly Module.

WebAssembly.Instance() (en-US)

Создаёт новый объект WebAssembly Instance.

WebAssembly.Memory() (en-US)

Создаёт новый объект WebAssembly Memory.

WebAssembly.Table()

Создаёт новый объект WebAssembly Table.

WebAssembly.CompileError() (en-US)

Создаёт новый объект WebAssembly CompileError.

WebAssembly.LinkError() (en-US)

Создаёт новый объект WebAssembly LinkError.

WebAssembly.RuntimeError() (en-US)

Создаёт новый объект WebAssembly RuntimeError.

Примеры

После загрузки некоторого байт-кода WebAssembly с помощью fetch, мы компилируем и создаём экземпляр модуля с помощью функции WebAssembly.instantiate() (en-US), импортируя функции JavaScript в WebAssembly Module в процессе. Этот промис результирует в объект (result), содержащий скомпилированные Module (en-US) и объекты Instance (en-US). Мы можем вызвать Exported WebAssembly function, которая была экспортирована через Instance.

js
var importObject = {
  imports: {
    imported_func: function (arg) {
      console.log(arg);
    },
  },
};

fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => WebAssembly.instantiate(bytes, importObject))
  .then((result) => result.instance.exports.exported_func());

Примечание: Смотрите пример index.html на GitHub (view it live also), который использует наши fetchAndInstantiate() библиотечные функции.

Спецификации

Specification
WebAssembly JavaScript Interface
# webassembly-namespace

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также