--- title: WebAssembly slug: WebAssembly translation_of: WebAssembly --- <div>{{WebAssemblySidebar}}</div> <p class="summary" dir="ltr" id="docs-internal-guid-22bb55aa-d69e-e8ef-cbc6-aafea272f684">WebAssembly – это новый открытый формат байт-кода, исполняемого современными браузерами. Он позволяет переносить код, написанный на таких языках как C, C++, C#, Rust, в низкоуровневые ассемблерные инструкции и использовать его в сети. Формат имеет компактные размеры, высокую производительность, близкую к нативной, и может одновременно работать с JavaScript.</p> <h2 dir="ltr" id="В_двух_словах">В двух словах</h2> <p dir="ltr">WebAssembly оказывает огромное влияние на веб-платформу — он предоставляет способ исполнения кода, написанного на различных языках, в сети, со скоростью близкой к нативной, чего ранее невозможно было достичь.</p> <p dir="ltr">WebAssembly разработан для дополнения JavaScript – используя WebAssembly JavaScript API вы можете загружать модули WebAssembly в приложения JavaScript и обеспечивать взаимодействие между ними, используя общие функции. Такой подход позволяет вам получить производительность и мощность WebAssembly, а также выразительность и гибкость JavaScript в ваших приложениях, даже если вы не знаете как писать код WebAssembly, а используете готовые модули.</p> <p dir="ltr">И что ещё лучше, так это то, что WebAssembly разрабатывается как веб-стандарт <a href="https://www.w3.org/wasm/">W3C WebAssembly Working Group</a> и <a href="https://www.w3.org/community/webassembly/">Community Group</a> при активном участии основных производителей браузеров.</p> <div class="row topicpage-table"> <div class="section"> <h2 dir="ltr" id="Руководства">Руководства</h2> <dl> <dt><a href="/ru/docs/WebAssembly/Concepts">Основы WebAssembly</a></dt> <dd>Прежде всего, начните с чтения общего описания WebAssembly - что это такое, чем это может быть полезно, почему он подходит для веб-платформы и как его использовать.</dd> <dt><a href="/en-US/docs/WebAssembly/C_to_wasm">Компиляция кода C/C++ в WebAssembly</a></dt> <dd>После того как вы написали код на C / C ++, вы можете скомпилировать его в .wasm, например, с помощью инструмента <a href="/en-US/docs/Mozilla/Projects/Emscripten/">Emscripten</a>. Давайте посмотрим, как это работает.</dd> <dt><a href="https://developer.mozilla.org/en-US/docs/WebAssembly/existing_C_to_wasm">Компиляция существующего кода C в WebAssembly</a></dt> <dd>Главное, что позволяет WebAssembly, это использование огромного множества разнообразных и проверенных временем библиотек, написанных на языке C, в сети.</dd> <dt><a href="/ru/docs/WebAssembly/Loading_and_running">Загрузка и запуск кода WebAssembly</a></dt> <dd>После того, как у вас появился .wasm, эта статья расскажет, как из него получить, скомпилировать и создать экземпляр модуля, совмещая <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly">WebAssembly JavaScript API</a> c <a href="/en-US/docs/Web/API/Fetch_API">Fetch</a> или <a href="/en-US/docs/Web/API/XMLHttpRequest">XHR</a> API.</dd> <dt><a href="/en-US/docs/WebAssembly/Caching_modules">Кеширование скомпилированных модулей WebAssembly</a></dt> <dd>Кеширование больших модулей WebAssembly на клиенте полезно для повышения скорости запуска приложений. В этой статье объясняется, как это сделать с помощью <a href="/en-US/docs/Web/API/IndexedDB_API">IndexedDB</a>.</dd> <dt><a href="/ru/docs/WebAssembly/Using_the_JavaScript_API">Использование WebAssembly JavaScript API</a></dt> <dd>После того, как вы загрузили модуль .wasm, вы захотите его использовать. В этой статье мы покажем вам, как использовать WebAssembly через WebAssembly JavaScript API.</dd> <dt><a href="/en-US/docs/WebAssembly/Exported_functions">Экспортируемые функции WebAssembly</a></dt> <dd>Экспортируемые функции WebAssembly — это функции нативного модуля, доступные в JavaScript, которые позволяют вызывать код WebAssembly из JavaScript. В этой статье описывается, что они из себя представляют.</dd> <dt><a href="/ru/docs/WebAssembly/Understanding_the_text_format">Описание текстового формата WebAssembly</a></dt> <dd>Эта статья описывает текстовый формат WebAssembly. Это низкоуровневое текстовое представления модулей .wasm используемое в инструментах разработчика во время отладки.</dd> <dt><a href="/en-US/docs/WebAssembly/Text_format_to_wasm">Перевод из текстового формата WebAssembly в wasm</a></dt> <dd>Эта статья содержит руководство по переводу модулей WebAssembly, написанных в текстовом формате, в двоичный файл .wasm.</dd> </dl> </div> <div class="section"> <h2 dir="ltr" id="Ссылки_на_API">Ссылки на API</h2> <dl> <dt>{{jsxref("Global_objects/WebAssembly", "WebAssembly")}}</dt> <dd>Этот объект является пространством имён для всех функций, связанных с WebAssembly.</dd> <dt>{{jsxref("Global_objects/WebAssembly/Module", "WebAssembly.Module()")}}</dt> <dd>Объект <code>WebAssembly.Module</code> содержит не контролируемый WebAssembly код, который уже скомпилирован браузером и может эффективно использоваться совместно с<a href="/en-US/docs/Web/API/Worker/postMessage"> Workers</a>, <a href="/en-US/docs/WebAssembly/Caching_modules">кешироваться в IndexedDB</a>, и иметь несколько экземпляров.</dd> <dt>{{jsxref("Global_objects/WebAssembly/Instance", "WebAssembly.Instance()")}}</dt> <dd>Объект <code>WebAssembly.Instance</code> это контролируемый, исполняемый экземпляр <code>Module</code>. <code>Instance</code> содержит все <a href="/en-US/docs/WebAssembly/Exported_functions">экспортированные функции WebAssembly</a>, которые позволяют вызывать код WebAssembly из JavaScript.</dd> <dt>{{jsxref("Global_objects/WebAssembly/instantiateStreaming", "WebAssembly.instantiateStreaming()")}}</dt> <dd>Функция <code>WebAssembly.instantiateStreaming()</code> является основной для компиляции и создания экземпляра кода WebAssembly, возвращающая одновременно <code>Module</code> и <code>Instance</code>.</dd> <dt>{{jsxref("Global_objects/WebAssembly/Memory", "WebAssembly.Memory()")}}</dt> <dd><code>WebAssembly.Memory</code> это изменяемый {{jsxref("Global_objects/ArrayBuffer", "ArrayBuffer")}} содержащий в себе данные не имеющие типа к которым обращается <code>Instance</code>.</dd> <dt>{{jsxref("Global_objects/WebAssembly/Table", "WebAssembly.Table()")}}</dt> <dd><code>WebAssembly.Table</code> объект является изменяемым типизированным массивом значений, таких как ссылки на функции, которые доступны <code>Instance</code>.</dd> <dt>{{jsxref("WebAssembly.CompileError()")}}</dt> <dd>Создаёт новый WebAssembly <code>CompileError</code> объект.</dd> <dt>{{jsxref("WebAssembly.LinkError()")}}</dt> <dd>Создаёт новый WebAssembly <code>LinkError</code> объект.</dd> <dt>{{jsxref("WebAssembly.RuntimeError()")}}</dt> <dd>Создаёт новый WebAssembly <code>RuntimeError</code> объект.</dd> </dl> </div> </div> <h2 dir="ltr" id="Примеры">Примеры</h2> <ul dir="ltr"> <li><a href="https://github.com/JasonWeathersby/WASMSobel">WASMSobel</a></li> <li>Больше примеров вы можете найти в нашем репозитории <a href="https://github.com/mdn/webassembly-examples/">webassembly-examples</a>.</li> </ul> <h2 id="Спецификация">Спецификация</h2> <table class="standard-table"> <thead> <tr> <th scope="col">Specification</th> <th scope="col">Status</th> <th scope="col">Comment</th> </tr> </thead> <tbody> <tr> <td>{{SpecName('WebAssembly JS')}}</td> <td>{{Spec2('WebAssembly JS')}}</td> <td>Initial draft definition of the JavaScript API.</td> </tr> </tbody> </table> <h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2> <p>{{Compat("javascript.builtins.WebAssembly")}}</p> <h2 id="Смотрите_также">Смотрите также</h2> <ul dir="ltr"> <li><a href="https://research.mozilla.org/webassembly/">WebAssembly on Mozilla Research</a></li> <li><a href="http://webassembly.org/">webassembly.org</a></li> <li><a href="https://hacks.mozilla.org/category/webassembly/">WebAssembly articles on Mozilla Hacks blog</a></li> <li><a href="https://www.w3.org/community/webassembly/">W3C WebAssembly Community Group</a></li> <li><a href="/en-US/docs/Web/HTTP/Headers/Large-Allocation">Large-Allocation HTTP header</a></li> <li><a href="https://developers.google.com/web/updates/2018/03/emscripting-a-c-library">Emscripting a C Library to Wasm</a></li> </ul>