diff options
Diffstat (limited to 'files/ru/web/javascript/reference/global_objects/webassembly/index.html')
-rw-r--r-- | files/ru/web/javascript/reference/global_objects/webassembly/index.html | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/files/ru/web/javascript/reference/global_objects/webassembly/index.html b/files/ru/web/javascript/reference/global_objects/webassembly/index.html new file mode 100644 index 0000000000..daff5d4ee7 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/webassembly/index.html @@ -0,0 +1,161 @@ +--- +title: WebAssembly +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly +--- +<div>{{JSRef}}{{SeeCompatTable}}</div> + +<p>Объект JavaScript <strong><code>WebAssembly</code></strong> действует как пространство имен для всего <a href="/en-US/docs/WebAssembly">WebAssembly</a>-связанного функционала.</p> + +<p>В отличие от большинства других глобальных объектов, <code>WebAssembly</code> не является конструктором (это не объект функции). Можно сравнить его с {{jsxref("Math")}}, который так же является пространством имен констант и функций, или {{jsxref("Intl")}}, который является пространством имен для конструкторов интернационализации и других языково-чувствительных функций.</p> + +<h2 id="Описание">Описание</h2> + +<p>Основное использование <code>WebAssembly</code> следующее:</p> + +<ul> + <li>Загрузка кода WebAssembly, с помощью функции {{jsxref("WebAssembly.instantiate()")}}.</li> + <li>Создание новой памяти и таблицы экземпляров с помощью конструкторов {{jsxref("WebAssembly.Memory()")}}/{{jsxref("WebAssembly.Table()")}}.</li> + <li>Обеспечение возможности управлять ошибками, которые появляются в WebAssembly с помощью конструкторов {{jsxref("WebAssembly.CompileError()")}}/{{jsxref("WebAssembly.LinkError()")}}/{{jsxref("WebAssembly.RuntimeError()")}}.</li> +</ul> + +<h2 id="Методы">Методы</h2> + +<dl> + <dt>{{jsxref("WebAssembly.instantiate()")}}</dt> + <dd>Основное API для компиляции и создания экземпляра кода WebAssembly, возвращающее <code>Module</code> и его первый <code>Instance</code>.</dd> + <dt>{{jsxref("WebAssembly.compile()")}}</dt> + <dd>Компилирует {{jsxref("WebAssembly.Module")}} из бинарного кода WebAssembly, оставляя создание экземпляра отдельным шагом.</dd> + <dt>{{jsxref("WebAssembly.validate()")}}</dt> + <dd>Проверяет представленный типизированный массив бинарного кода WebAssembly, возвращая в зависимости от того были ли байты кода WebAssembly валидны (<code>true</code>) или (<code>false</code>).</dd> +</dl> + +<h2 id="Конструкторы">Конструкторы</h2> + +<dl> + <dt>{{jsxref("WebAssembly.Module()")}}</dt> + <dd>Создает новый объект WebAssembly <code>Module</code>.</dd> + <dt>{{jsxref("WebAssembly.Instance()")}}</dt> + <dd>Создает новый объект WebAssembly <code>Instance</code>.</dd> + <dt>{{jsxref("WebAssembly.Memory()")}}</dt> + <dd>Создает новый объект WebAssembly <code>Memory</code>.</dd> + <dt>{{jsxref("WebAssembly.Table()")}}</dt> + <dd>Создает новый объект WebAssembly <code>Table</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> + +<h2 id="Примеры">Примеры</h2> + +<p>После загрузки некоторого байт-кода WebAssembly с помощью fetch, мы компилируем и создаем экземпляр модуля с помощью функции {{jsxref("WebAssembly.instantiate()")}}, импортируя функции JavaScript в WebAssembly Module в процессе. Этот промис результирует в объект (<code>result</code>), содержащий скомпилированные <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module">Module</a></code> и объекты <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance">Instance</a></code>. Мы можем вызвать <a href="/en-US/docs/WebAssembly/Exported_functions">Exported WebAssembly function</a>, которая была экспортирована через <code>Instance</code>.</p> + +<pre class="brush: js">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() +);</pre> + +<div class="note"> +<p><strong>Note</strong>: Смотрите пример <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/index.html">index.html</a> на GitHub (<a href="https://mdn.github.io/webassembly-examples/js-api-examples/">view it live also</a>), который использует наши <code><a href="https://github.com/mdn/webassembly-examples/blob/master/wasm-utils.js#L1">fetchAndInstantiate()</a></code> библиотечные функции.</p> +</div> + +<h2 id="Спецификации">Спецификации</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Спецификация</th> + <th scope="col">Статус</th> + <th scope="col">Коммент</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#the-webassembly-object', 'WebAssembly')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>Первоначальное определение проекта.</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">Поддержка браузерами</h2> + +<div>{{CompatibilityTable}}</div> + +<div id="compat-desktop"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Chrome</th> + <th>Edge</th> + <th>Firefox (Gecko)</th> + <th>Internet Explorer</th> + <th>Opera</th> + <th>Safari (WebKit)</th> + </tr> + <tr> + <td>Basic support</td> + <td>57</td> + <td>15<sup>[2]</sup></td> + <td>{{CompatGeckoDesktop(52)}}<sup>[1]</sup></td> + <td>{{CompatNo}}</td> + <td>44</td> + <td>11</td> + </tr> + </tbody> +</table> +</div> + +<div id="compat-mobile"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Chrome for Android</th> + <th>Android Webview</th> + <th>Edge Mobile</th> + <th>Firefox Mobile (Gecko)</th> + <th>IE Mobile</th> + <th>Opera Mobile</th> + <th>Safari Mobile</th> + </tr> + <tr> + <td>Basic support</td> + <td>57</td> + <td>57</td> + <td>{{CompatNo}}</td> + <td>{{CompatGeckoMobile(52)}}<sup>[1]</sup></td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>11</td> + </tr> + </tbody> +</table> +</div> + +<p>[1] WebAssembly включен в Firefox 52+, хотя не валиден в <a href="https://www.mozilla.org/en-US/firefox/organizations/">Firefox 52 Extended Support Release</a> (ESR.)</p> + +<p>[2] В настоящее время поддерживается флаг «Экспериментальные функции JavaScript». Для более подробной информации смотрите <a href="https://blogs.windows.com/msedgedev/2017/04/20/improved-javascript-performance-webassembly-shared-memory/">этот blog post</a>.</p> + +<h2 id="Смотри_также">Смотри также</h2> + +<ul> + <li><a href="/en-US/docs/WebAssembly">WebAssembly</a> обзорная страница</li> + <li><a href="/en-US/docs/WebAssembly/Concepts">WebAssembly концепции</a></li> + <li><a href="/en-US/docs/WebAssembly/Using_the_JavaScript_API">Использование WebAssembly JavaScript API</a></li> +</ul> |