--- title: WebAssembly slug: Web/JavaScript/Reference/Global_Objects/WebAssembly translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly ---
{{JSRef}}{{SeeCompatTable}}

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

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

Описание

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

Методы

{{jsxref("WebAssembly.instantiate()")}}
Основное API для компиляции и создания экземпляра кода WebAssembly, возвращающее Module и его первый Instance.
{{jsxref("WebAssembly.compile()")}}
Компилирует {{jsxref("WebAssembly.Module")}} из бинарного кода WebAssembly, оставляя создание экземпляра отдельным шагом.
{{jsxref("WebAssembly.validate()")}}
Проверяет представленный типизированный массив бинарного кода WebAssembly, возвращая в зависимости от того были ли байты кода WebAssembly валидны (true) или (false).

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

{{jsxref("WebAssembly.Module()")}}
Создаёт новый объект WebAssembly Module.
{{jsxref("WebAssembly.Instance()")}}
Создаёт новый объект WebAssembly Instance.
{{jsxref("WebAssembly.Memory()")}}
Создаёт новый объект WebAssembly Memory.
{{jsxref("WebAssembly.Table()")}}
Создаёт новый объект WebAssembly Table.
{{jsxref("WebAssembly.CompileError()")}}
Создаёт новый объект WebAssembly CompileError.
{{jsxref("WebAssembly.LinkError()")}}
Создаёт новый объект WebAssembly LinkError.
{{jsxref("WebAssembly.RuntimeError()")}}
Создаёт новый объект WebAssembly RuntimeError.

Примеры

После загрузки некоторого байт-кода WebAssembly с помощью fetch, мы компилируем и создаём экземпляр модуля с помощью функции {{jsxref("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() библиотечные функции.

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

Спецификация Статус Коммент
{{SpecName('WebAssembly JS', '#the-webassembly-object', 'WebAssembly')}} {{Spec2('WebAssembly JS')}} Первоначальное определение проекта.

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

{{CompatibilityTable}}
Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 57 15[2] {{CompatGeckoDesktop(52)}}[1] {{CompatNo}} 44 11
Feature Chrome for Android Android Webview Edge Mobile Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support 57 57 {{CompatNo}} {{CompatGeckoMobile(52)}}[1] {{CompatNo}} {{CompatNo}} 11

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

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

Смотри также