WebAssembly
Experimental
Это экспериментальная технология
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.
Объект JavaScript WebAssembly
действует как пространство имён для всего WebAssembly-связанной функциональности.
В отличие от большинства других глобальных объектов, WebAssembly
не является конструктором (это не объект функции). Можно сравнить его с Math
, который так же является пространством имён констант и функций, или Intl
, который является пространством имён для конструкторов интернационализации и других языково-чувствительных функций.
Описание
Основное использование WebAssembly
следующее:
- Загрузка кода WebAssembly, с помощью функции
WebAssembly.instantiate()
(en-US). - Создание новой памяти и таблицы экземпляров с помощью конструкторов
WebAssembly.Memory()
(en-US)/WebAssembly.Table()
. - Обеспечение возможности управлять ошибками, которые появляются в WebAssembly с помощью конструкторов
WebAssembly.CompileError()
(en-US)/WebAssembly.LinkError()
(en-US)/WebAssembly.RuntimeError()
(en-US).
Методы
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()
библиотечные функции.
Спецификации
Спецификация | Статус | Коммент |
---|---|---|
WebAssembly JavaScript Interface Определение 'WebAssembly' в этой спецификации. |
Рабочий черновик | Первоначальное определение проекта. |
Поддержка браузерами
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.
Смотрите также
- WebAssembly обзорная страница
- WebAssembly концепции
- Использование WebAssembly JavaScript API