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