WebAssembly – это новый открытый формат байт-кода, исполняемого современными браузерами. Он позволяет переносить код, написанный на таких языках как C, C++, Rust, в низкоуровневые ассемблерные инструкции и использовать его в сети. Формат имеет компактные размеры, высокую производительность, близкую к нативной, и может одновременно работать с  JavaScript.

В двух словах

WebAssembly оказывает огромное влияние на веб-платформу — он предоставляет способ исполнения кода, написанного на различных языках, в сети, со скоростью близкой к нативной, чего ранее невозможно было достичь.

WebAssembly разработан для дополнения JavaScript – используя WebAssembly JavaScript API вы можете загружать модули WebAssembly в приложения JavaScript и обеспечивать взаимодействие между ними, используя общие функции. Такой подход позволяет вам получить производительность и мощность WebAssembly, а также выразительность и гибкость JavaScript в ваших приложениях, даже если вы не знаете как писать код WebAssembly, а используете готовые модули.

И что еще лучше, так это то, что WebAssembly разрабатывается как веб-стандарт W3C WebAssembly Working Group и Community Group при активном участием основных производителей браузеров.

Руководства

Описание WebAssembly
Прежде всего, начните с чтения общего описания WebAssembly - что это такое, чем это может быть полезно, почему он подходит для веб-платформы и как его использовать.
Компиляция кода C/C++ в WebAssembly
После того как вы написали код на C / C ++, вы можете скомпилировать его в .wasm, например, с помощью инструмента Emscripten. Давайте посмотрим, как это работает.
Компиляция существующего кода C в WebAssembly
Главное, что позволяет WebAssembly, это использование огромного множества разнообразных и проверенных временем библиотек, написанных на языке C, в сети.
Загрузка и запуск кода WebAssembly
После того, как у вас появился .wasm, эта статья расскажет, как из него получить, скомпилировать и создать экземпляр модуля, совмещая WebAssembly JavaScript API c Fetch или XHR API.
Кэширование скомпилированных модулей WebAssembly
Кэширование больших модулей WebAssembly на клиенте полезно для повышения скорости запуска приложений. В этой статье объясняется, как это сделать с помощью IndexedDB.
Использование WebAssembly JavaScript API
После того, как вы загрузили модуль .wasm, вы захотите его использовать. В этой статье мы покажем вам, как использовать WebAssembly через WebAssembly JavaScript API.
Экспортируемые функции WebAssembly
Экспортируемые функции WebAssembly — это функции нативного модуля, доступные в JavaScript, которые позволяют вызывать код WebAssembly из JavaScript. В этой статье описывается, что они из себя представляют.
Описание текстового формата WebAssembly
Эта статья описывает текстовый формат WebAssembly. Это низкоуровневое текстовое представления модулей .wasm используемое в инструментах разработчика во время отладки.
Перевод из текстового формата WebAssembly в wasm
Эта статья содержит руководство по переводу модулей WebAssembly, написанных в текстовом формате, в двоичный файл .wasm.

Ссылки на API

WebAssembly
Этот объект является пространством имен для всех функций, связанных с WebAssembly.
WebAssembly.Module()
Объект WebAssembly.Module содержит не контролируемый WebAssembly код, который уже скомпилирован браузером и может эффективно использоваться совместно с Workers, кешироваться в IndexedDB, и иметь несколько экземпляров.
WebAssembly.Instance()
Объект WebAssembly.Instance это контролируемый, исполняемый экземпляр ModuleInstance содержит все  экспортированные функции WebAssembly, которые позволяют вызывать код WebAssembly из JavaScript.
WebAssembly.instantiateStreaming()
Функция WebAssembly.instantiateStreaming() является основной для компиляции и создания экземпляра кода WebAssembly, возвращающая одновременно Module и Instance.
WebAssembly.Memory()
WebAssembly.Memory это изменяемый ArrayBuffer содержащий в себе данные не имеющие типа к которым обращается Instance.
WebAssembly.Table()
WebAssembly.Table объект является изменяемым типизированным массивом значений, таких как ссылки на функции, которые доступны Instance.
WebAssembly.CompileError()
Создает новый WebAssembly CompileError объект.
WebAssembly.LinkError()
Создает новый WebAssembly LinkError объект.
WebAssembly.RuntimeError()
Создает новый WebAssembly RuntimeError объект.

Примеры

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

Specification Status Comment
WebAssembly JavaScript Interface Рабочий черновик Initial draft definition of the JavaScript API.

Совместимость с браузерами

ВозможностьChromeEdgeFirefoxInternet ExplorerOperaSafari
Базовая поддержка5716522 Нет4411
CompileError5716522 Нет4411
Global Нет Нет62 Нет Нет Нет
Instance5716522 Нет4411
LinkError5716522 Нет4411
Memory5716522 Нет4411
Module5716522 Нет4411
RuntimeError5716522 Нет4411
Table5716522 Нет4411
compile5716522 Нет4411
compileStreaming611658 Нет47 Нет
instantiate5716522 Нет4411
instantiateStreaming611658 Нет47 Нет
validate5716522 Нет4411
ВозможностьAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Базовая поддержка5757 Да1522 ?117.0
CompileError5757 Да1522 ?117.0
Global Нет Нет Нет62 Нет Нет Нет
Instance5757 Да1522 ?117.0
LinkError5757 Да1522 ?117.0
Memory5757 Да1522 ?117.0
Module5757 Да1522 ?117.0
RuntimeError5757 Да1522 ?117.0
Table5757 Да1522 ?117.0
compile5757 Да152244117.0
compileStreaming6161 Нет58 ? Нет Нет
instantiate5757 Да1522 ?117.0
instantiateStreaming6161 Нет58 ? Нет Нет
validate5757 Да1522 ?117.0

1. This feature is behind the Experimental JavaScript Features preference.

2. Disabled in the Firefox 52 Extended Support Release (ESR).

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

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

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