WebAssembly

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

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

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

Описание

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

Методы

WebAssembly.instantiate()

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

WebAssembly.compile()

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

WebAssembly.validate()

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

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

WebAssembly.Module()

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

WebAssembly.Instance()

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

WebAssembly.Memory()

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

WebAssembly.Table()

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

WebAssembly.CompileError()

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

WebAssembly.LinkError()

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

WebAssembly.RuntimeError()

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

Примеры

После загрузки некоторого байт-кода WebAssembly с помощью fetch, мы компилируем и создаём экземпляр модуля с помощью функции WebAssembly.instantiate(), импортируя функции JavaScript в WebAssembly Module в процессе. Этот промис результирует в объект (result), содержащий скомпилированные Module и объекты Instance. Мы можем вызвать 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

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