WebAssembly

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

Объект 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 и объекты Instance. Мы можем вызвать Exported WebAssembly function, которая была экспортирована через Instance.

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()
);

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

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

Specification
WebAssembly JavaScript Interface
# webassembly-namespace

Поддержка браузерами

BCD tables only load in the browser

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