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.

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

Update compatibility data on GitHub
КомпьютерыМобильныеServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidEdge MobileFirefox для AndroidOpera для AndroidiOS SafariSamsung InternetNode.js
Базовая поддержкаChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Edge Mobile Полная поддержка Да
Отключено
Полная поддержка Да
Отключено
Отключено This feature is behind the Experimental JavaScript Features preference.
Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
CompileErrorChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Edge Mobile Полная поддержка Да
Отключено
Полная поддержка Да
Отключено
Отключено This feature is behind the Experimental JavaScript Features preference.
Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
GlobalChrome Полная поддержка 69Edge Нет поддержки НетFirefox Полная поддержка 62IE Нет поддержки НетOpera Нет поддержки НетSafari Нет поддержки НетWebView Android Полная поддержка 69Chrome Android Полная поддержка 69Edge Mobile Нет поддержки НетFirefox Android Полная поддержка 62Opera Android Нет поддержки НетSafari iOS Нет поддержки НетSamsung Internet Android Нет поддержки Нетnodejs Нет поддержки Нет
InstanceChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Edge Mobile Полная поддержка Да
Отключено
Полная поддержка Да
Отключено
Отключено This feature is behind the Experimental JavaScript Features preference.
Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
LinkErrorChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Edge Mobile Полная поддержка Да
Отключено
Полная поддержка Да
Отключено
Отключено This feature is behind the Experimental JavaScript Features preference.
Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
MemoryChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Edge Mobile Полная поддержка Да
Отключено
Полная поддержка Да
Отключено
Отключено This feature is behind the Experimental JavaScript Features preference.
Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
ModuleChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Edge Mobile Полная поддержка Да
Отключено
Полная поддержка Да
Отключено
Отключено This feature is behind the Experimental JavaScript Features preference.
Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
RuntimeErrorChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Edge Mobile Полная поддержка Да
Отключено
Полная поддержка Да
Отключено
Отключено This feature is behind the Experimental JavaScript Features preference.
Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
TableChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Edge Mobile Полная поддержка Да
Отключено
Полная поддержка Да
Отключено
Отключено This feature is behind the Experimental JavaScript Features preference.
Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
compileChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Edge Mobile Полная поддержка Да
Отключено
Полная поддержка Да
Отключено
Отключено This feature is behind the Experimental JavaScript Features preference.
Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Полная поддержка 44Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
compileStreamingChrome Полная поддержка 61Edge Полная поддержка 16Firefox Полная поддержка 58IE Нет поддержки НетOpera Полная поддержка 47Safari Нет поддержки НетWebView Android Полная поддержка 61Chrome Android Полная поддержка 61Edge Mobile Нет поддержки НетFirefox Android Полная поддержка 58Opera Android ? Safari iOS Нет поддержки НетSamsung Internet Android Нет поддержки Нетnodejs Нет поддержки Нет
instantiateChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Edge Mobile Полная поддержка Да
Отключено
Полная поддержка Да
Отключено
Отключено This feature is behind the Experimental JavaScript Features preference.
Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
instantiateStreamingChrome Полная поддержка 61Edge Полная поддержка 16Firefox Полная поддержка 58IE Нет поддержки НетOpera Полная поддержка 47Safari Нет поддержки НетWebView Android Полная поддержка 61Chrome Android Полная поддержка 61Edge Mobile Нет поддержки НетFirefox Android Полная поддержка 58Opera Android ? Safari iOS Нет поддержки НетSamsung Internet Android Нет поддержки Нетnodejs Нет поддержки Нет
validateChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Edge Mobile Полная поддержка Да
Отключено
Полная поддержка Да
Отключено
Отключено This feature is behind the Experimental JavaScript Features preference.
Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки
Совместимость неизвестна  
Совместимость неизвестна
Смотрите замечания реализации.
Смотрите замечания реализации.
Пользователь должен сам включить эту возможность.
Пользователь должен сам включить эту возможность.

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

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

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