We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

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

Объект 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.

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() библиотечные функции.

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

Спецификация Статус Коммент
WebAssembly JavaScript Interface
Определение 'WebAssembly' в этой спецификации.
Рабочий черновик Первоначальное определение проекта.

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

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 57 15[2] 52 (52)[1] Нет 44 11
Feature Chrome for Android Android Webview Edge Mobile Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support 57 57 Нет 52.0 (52)[1] Нет Нет 11

[1] WebAssembly включен в Firefox 52+, хотя не валиден в Firefox 52 Extended Support Release (ESR.)

[2] В настоящее время поддерживается флаг «Экспериментальные функции JavaScript».  Для более подробной информации смотрите этот blog post.

Смотри также

Метки документа и участники

Внесли вклад в эту страницу: warsan, Fingasss, curdwithraisins
Обновлялась последний раз: warsan,