diff options
| author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
|---|---|---|
| committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
| commit | 074785cea106179cb3305637055ab0a009ca74f2 (patch) | |
| tree | e6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/ru/web/api/web_workers_api | |
| parent | da78a9e329e272dedb2400b79a3bdeebff387d47 (diff) | |
| download | translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2 translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip | |
initial commit
Diffstat (limited to 'files/ru/web/api/web_workers_api')
3 files changed, 721 insertions, 0 deletions
diff --git a/files/ru/web/api/web_workers_api/functions_and_classes_available_to_workers/index.html b/files/ru/web/api/web_workers_api/functions_and_classes_available_to_workers/index.html new file mode 100644 index 0000000000..239552d698 --- /dev/null +++ b/files/ru/web/api/web_workers_api/functions_and_classes_available_to_workers/index.html @@ -0,0 +1,345 @@ +--- +title: Функции и классы доступные для Web Workers +slug: Web/API/Web_Workers_API/Functions_and_classes_available_to_workers +translation_of: Web/API/Web_Workers_API/Functions_and_classes_available_to_workers +--- +<p>In addition to the standard <a href="/en-US/docs/Web/JavaScript">JavaScript</a> set of functions (such as {{jsxref("String")}}, {{jsxref("Array")}}, {{jsxref("Object")}}, {{jsxref("JSON")}} etc), there are a variety of functions available from the DOM to workers. This article provides a list of those.</p> + +<p><strong>Workers run in another global context, {{domxref("DedicatedWorkerGlobalScope")}} different from the current window</strong>. By default methods and properties of {{domxref("Window")}} are not available to them, but {{domxref("DedicatedWorkerGlobalScope")}}, like <code>Window</code>, implements {{domxref("WindowTimers")}} and {{domxref("WindowBase64")}}.</p> + +<h2 id="Сравнение_свойств_и_методов_различных_типов_worker'ов">Сравнение свойств и методов различных типов worker'ов</h2> + +<table class="standard-table"> + <tbody> + <tr> + <td class="header">Функция</td> + <td class="header">Выделенные worker'ы</td> + <td class="header">Общие worker'ы</td> + <td class="header">Сервис worker'ы</td> + <td class="header">Chrome worker'ы {{Non-standard_inline}}</td> + <td class="header">Внешние worker'ы</td> + </tr> + <tr> + <td>{{domxref("WindowBase64.atob", "atob()")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("Window")}}</td> + </tr> + <tr> + <td>{{domxref("WindowBase64.btoa", "btoa()")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("Window")}}</td> + </tr> + <tr> + <td>{{domxref("WindowTimers.clearInterval", "clearInterval()")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("Window")}}</td> + </tr> + <tr> + <td>{{domxref("WindowTimers.clearTimeout", "clearTimeout()")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("Window")}}</td> + </tr> + <tr> + <td>{{domxref("Window.dump()", "dump()")}} {{non-standard_inline}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("Window")}}</td> + </tr> + <tr> + <td>{{domxref("WindowTimers.setInterval", "setInterval()")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("Window")}}</td> + </tr> + <tr> + <td>{{domxref("WindowTimers.setTimeout", "setTimeout()")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("Window")}}</td> + </tr> + <tr> + <td>{{domxref("WorkerGlobalScope.importScripts", "importScripts()")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>no</td> + </tr> + <tr> + <td>{{domxref("WorkerGlobalScope.close", "close()")}} {{non-standard_inline}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, on {{domxref("WorkerGlobalScope")}}</td> + <td>yes, but is a no-op.</td> + <td>Unknown</td> + <td>no</td> + </tr> + <tr> + <td>{{domxref("DedicatedWorkerGlobalScope.postMessage", "postMessage()")}}</td> + <td>yes, on {{domxref("DedicatedWorkerGlobalScope")}}</td> + <td>no</td> + <td>no</td> + <td>Unknown</td> + <td>no</td> + </tr> + </tbody> +</table> + +<h2 id="Доступное_worker'ам_API">Доступное worker'ам API</h2> + +<table class="standard-table"> + <tbody> + <tr> + <td class="header">Функция</td> + <td class="header">Функционал</td> + <td class="header">Поддержка Gecko (Firefox)</td> + <td class="header">Поддержка IE</td> + <td class="header">Поддержка Blink (Chrome and Opera)</td> + <td class="header">Поддержка WebKit (Safari)</td> + </tr> + <tr> + <td>{{domxref("Broadcast_Channel_API","Broadcast Channel API")}}</td> + <td>Allows simple communication between {{glossary("browsing context", "browsing contexts")}} (that is <em>windows</em>, <em>tabs</em>, <em>frames</em>, or <em>iframes</em>) with the same {{glossary("origin")}} (usually pages from the same site).</td> + <td>{{ CompatGeckoDesktop(38)}}</td> + <td><span style="background-color: rgba(212, 221, 228, 0.14902);">{{CompatNo}}</span></td> + <td><span style="background-color: rgba(212, 221, 228, 0.14902);">{{CompatNo}}</span></td> + <td><span style="background-color: rgba(212, 221, 228, 0.14902);">{{CompatNo}}</span></td> + </tr> + <tr> + <td><span style="background-color: rgba(212, 221, 228, 0.14902);">{{domxref("Cache", "Cache")}}</span></td> + <td>Cache API<span style="background-color: rgba(212, 221, 228, 0.14902);"> provides the ability to programmatically</span> control cache storage associated with current origin.</td> + <td><span style="background-color: rgba(212, 221, 228, 0.14902);">{{CompatVersionUnknown}}</span></td> + <td><span style="background-color: rgba(212, 221, 228, 0.14902);">{{CompatNo}}</span></td> + <td><span style="background-color: rgba(212, 221, 228, 0.14902);">{{ CompatChrome(43) }}</span></td> + <td><span style="background-color: rgba(212, 221, 228, 0.14902);">{{CompatUnknown}}</span></td> + </tr> + <tr> + <td><span style="background-color: rgba(212, 221, 228, 0.14902);">{{domxref("Channel_Messaging_API", "Channel Messaging API")}}</span></td> + <td>Allows two separate scripts running in different browsing contexts attached to the same document (e.g., two IFrames, or the main document and an IFrame, two documents via a {{domxref("SharedWorker")}}, or two workers) to communicate directly via two ports.</td> + <td>{{ CompatGeckoDesktop(41)}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + </tr> + <tr> + <td><span style="background-color: rgba(212, 221, 228, 0.14902);">{{domxref("Console", "Console API")}}</span></td> + <td>Provides access to the browser's debugging console (e.g., the <a href="/en-US/docs/Tools/Web_Console">Web Console</a> in Firefox). The specifics of how it works vary from browser to browser, but there is a <em>de facto</em> set of features that are typically provided.</td> + <td>{{ CompatGeckoDesktop(38)}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + </tr> + <tr> + <td><span style="background-color: rgba(212, 221, 228, 0.14902);">{{domxref("CustomEvent")}}</span></td> + <td>The <strong><code>CustomEvent</code></strong> interface represents events initialized by an application for any purpose.</td> + <td>{{ CompatGeckoDesktop(48)}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + </tr> + <tr> + <td>{{domxref("Data_Store_API", "Data Store")}}</td> + <td>A powerful, flexible storage mechanism for multiple Firefox OS applications to use to store and share data between one another quickly, efficiently, and securely.</td> + <td>Only in Firefox OS internal (certified) applications, since v1.0.1.</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td>{{domxref("DOMRequest")}} and {{domxref("DOMCursor")}}</td> + <td>Respectively, these objects represents an ongoing operation (with listeners for reacting to the operation completely successfully, or failing, for example), and an ongoing operation over a list of results.</td> + <td>{{ CompatGeckoDesktop(41)}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>{{domxref("Fetch_API", "Fetch")}}</td> + <td>The Fetch spec provides an up-to-date definition of, and API for, fetching resources (e.g. across the network.)</td> + <td>Mostly in {{ CompatGeckoDesktop(34)}} behind pref, although a few features are later.</td> + <td>{{CompatNo}}</td> + <td>{{ CompatChrome(42) }}<br> + {{ CompatChrome(41) }} behind pref</td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td>{{domxref("FileReader")}}</td> + <td>This API allows asynchronous read of {{domxref("Blob")}} and {{domxref("File")}} objects.</td> + <td>{{CompatGeckoDesktop(46)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td>{{domxref("FileReaderSync")}}</td> + <td>This API allows synchronous read of {{domxref("Blob")}} and {{domxref("File")}} objects. This is an API that works only in workers.</td> + <td>{{CompatGeckoDesktop(8)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td>{{domxref("FormData")}}</td> + <td><code>FormData</code> objects provide a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest <a href="/en-US/docs/DOM/XMLHttpRequest#send()" title="XMLHttpRequest#send()"><code>send()</code></a> method.</td> + <td>{{CompatUnknown}} (should be in {{CompatGeckoDesktop(39)}})</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>{{domxref("ImageData")}}</td> + <td>The underlying pixel data of an area of a {{domxref("canvas")}} element. Manipulating such data can be a complex task better suited to be delegated to a Web Worker.</td> + <td>{{CompatGeckoDesktop(25)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td>{{domxref("IndexedDB_API", "IndexedDB")}}</td> + <td>Database to store records holding simple values and hierarchical objects.</td> + <td>{{CompatGeckoDesktop(37)}}, {{CompatGeckoDesktop(42)}} for {{domxref("IDBCursorWithValue")}}.</td> + <td>10.0</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td>{{domxref("Notifications_API", "Notifications")}}</td> + <td>Allows web pages to control the display of system notifications to the end user</td> + <td>{{CompatGeckoDesktop(41)}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>{{domxref("Performance")}}</td> + <td>The <strong><code>Performance</code></strong> interface represents timing-related performance information for the given page.</td> + <td>{{ CompatGeckoDesktop("34.0") }}</td> + <td>{{CompatUnknown}}</td> + <td>{{ CompatChrome("33.0") }}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>{{jsxref("Promise")}}</td> + <td>JavaScript objects that allow you to write asynchronous functions.</td> + <td>{{CompatGeckoDesktop(28)}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + </tr> + <tr> + <td>{{domxref("ServiceWorkerRegistration")}}</td> + <td>You can register a service worker from inside a standard worker, and use associated functionality.</td> + <td>{{CompatGeckoDesktop(40)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td>{{domxref("TextEncoder")}} and {{domxref("TextDecoder")}}</td> + <td>Create and return a new {{domxref("TextEncoder")}}, or respectively {{domxref("TextDecoder")}}, allowing to encode or decode strings into specific encodings.</td> + <td>{{CompatGeckoDesktop(20)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td>{{ domxref("URL") }}</td> + <td>Workers can use the static methods <a href="/en-US/docs/DOM/window.URL.createObjectURL" title="/en-US/docs/DOM/window.URL.createObjectURL">URL.createObjectURL</a> and <a href="/en-US/docs/DOM/window.URL.revokeObjectURL" title="/en-US/docs/DOM/window.URL.revokeObjectURL">URL.revokeObjectURL</a> with {{domxref("Blob")}} objects accesible to the worker.<br> + Workers can also create a new URL using the {{domxref("URL.URL", "URL()")}} constructor and call any normal method on the returned object.</td> + <td>{{CompatGeckoDesktop(21)}} and {{CompatGeckoDesktop(26)}} for URL() constructor</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td><a href="/en-US/docs/Web/API/WebGL_API">WebGL</a> with {{domxref("OffscreenCanvas")}}</td> + <td>WebGL (Web Graphics Library) is a JavaScript API for rendering interactive 3D and 2D graphics within any compatible web browser without the use of plug-ins.</td> + <td>{{CompatGeckoDesktop(44)}} behind a feature preference setting. In <code>about:config</code>, set <code>gfx.offscreencanvas.enabled</code> to true.</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td>{{domxref("WebSocket")}}</td> + <td>Creates and returns a new {{domxref("WebSocket")}} object; this mimics the behavior of the standard <code>WebSocket()</code> constructor.</td> + <td>{{CompatGeckoDesktop(37)}}</td> + <td>11.0</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + </tr> + <tr> + <td>{{domxref("Worker")}}</td> + <td>Creates a new {{ domxref("Worker") }}. Yes, workers can spawn more workers.</td> + <td>{{CompatGeckoDesktop("1.9.1")}}</td> + <td>10.0</td> + <td>{{CompatNo}} See <a class="external" href="https://code.google.com/p/chromium/issues/detail?id=31666" rel="external" title="http://code.google.com/p/chromium/issues/detail?id=31666">crbug.com/31666</a></td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td>{{domxref("WorkerGlobalScope")}}</td> + <td>The global scope of workers. This objects defines <a href="#workerscope">worker-specific functions</a>.</td> + <td>{{CompatVersionUnknown}}</td> + <td>10.0</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + </tr> + <tr> + <td>{{domxref("WorkerLocation")}}</td> + <td>The subset of the {{domxref("Location")}} interface available to workers.</td> + <td>{{CompatGeckoDesktop(1.9.2)}}</td> + <td>10.0</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + </tr> + <tr> + <td>{{domxref("WorkerNavigator")}}</td> + <td>The subset of the {{domxref("Navigator")}} interface available to workers.</td> + <td>Basic implementation {{CompatVersionUnknown}}<br> + {{domxref("NavigatorID.appCodeName", "appCodeName")}}, {{domxref("NavigatorID.product", "product")}}, {{domxref("NavigatorID.taintEnabled", "taintEnabled()")}}: {{CompatGeckoDesktop(28)}}<br> + {{domxref("WorkerNavigator.onLine", "onLine")}}: {{CompatGeckoDesktop(29)}}<br> + {{domxref("NavigatorLanguage")}}: {{CompatVersionUnknown}}</td> + <td>{{domxref("NavigatorID.appName", "appName")}}, {{domxref("NavigatorID.appVersion", "appVersion")}}, {{domxref("WorkerNavigator.onLine", "onLine")}}, {{domxref("NavigatorID.platform", "platform")}}, {{domxref("NavigatorID.userAgent", "userAgent")}}: 10.0<br> + Other: {{CompatNo}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + </tr> + <tr> + <td>{{domxref("XMLHttpRequest")}}</td> + <td>Creates and returns a new {{domxref("XMLHttpRequest")}} object; this mimics the behavior of the standard <code>XMLHttpRequest()</code> constructor. Note that the <code>responseXML</code> and <code>channel</code> attributes on <code>XMLHttpRequest</code> always return <code>null</code>.</td> + <td> + <p>Basic: {{CompatGeckoDesktop("1.9.1")}}</p> + + <p>{{domxref("XMLHttpRequest.response", "response")}} and {{domxref("XMLHttpRequest.responseType", "responseType")}} are available since {{CompatGeckoDesktop("10")}}</p> + + <p>{{domxref("XMLHttpRequest.timeout", "timeout")}} and {{domxref("XMLHttpRequest.ontimeout", "ontimeout")}} are available since {{CompatGeckoDesktop("13")}}</p> + </td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + </tr> + </tbody> +</table> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/API/Web_Workers_API/Using_web_workers">Using web workers</a></li> + <li>{{domxref("Worker")}}</li> +</ul> diff --git a/files/ru/web/api/web_workers_api/index.html b/files/ru/web/api/web_workers_api/index.html new file mode 100644 index 0000000000..706dab35cb --- /dev/null +++ b/files/ru/web/api/web_workers_api/index.html @@ -0,0 +1,223 @@ +--- +title: Web Workers API +slug: Web/API/Web_Workers_API +tags: + - API + - NeedsTranslation + - Service Workers + - Shared Workers + - TopicStub + - Web Workers + - Workers +translation_of: Web/API/Web_Workers_API +--- +<p>{{DefaultAPISidebar("Web Workers API")}}</p> + +<p class="summary"><strong>Web Workers</strong> это механизм, который позволяет скрипту выполняться в фоновом потоке, который отделен от основного потока веб-приложения. <span id="result_box" lang="ru"><span>Преимущество заключается в том, ресурсоёмкие вычисления могут выполняться в отдельном потоке, позволяя запустить основной (обычно пользовательский) поток без блокировки и замедления</span></span>.</p> + +<h2 id="Концепции_и_использование_Web_воркеров">Концепции и использование Web воркеров</h2> + +<p>Worker (работник, воркер) - это объект созданный при помощи конструктора (например, {{domxref("Worker.Worker", "Worker()")}}), <span id="result_box" lang="ru"><span>который запускает именованный файл JavaScript - этот файл содержит код, который будет запускаться в потоке воркера;</span></span> воркеры запускаются в другом глобальном контексте отличном от текущего контекста {{domxref("window")}}. Этот контекст представлен объектом {{domxref("DedicatedWorkerGlobalScope")}} <span id="result_box" lang="ru"><span>в случае специализированных воркеров (стандартные воркеры, которые используются одним скриптом, общие воркеры используют</span></span> {{domxref("SharedWorkerGlobalScope")}}).</p> + +<p><span id="result_box" lang="ru"><span>Вы можете запустить любой код, который вам нравится внутри потока воркера, за некоторыми исключениями.</span> <span>Например, вы не можете напрямую манипулировать DOM внутри воркера или использовать некоторые методы и свойства по умолчанию</span></span> объекта {{domxref("window")}}. <span id="result_box" lang="ru"><span>Но вы можете использовать большое количество свойств и методов, доступных в</span></span> <code>window</code>, включая <a href="/en-US/docs/WebSockets">WebSockets</a>, и механизм хранения данных такой, как <a href="/en-US/docs/Web/API/IndexedDB_API">IndexedDB</a> или <a href="/en-US/docs/Web/API/Data_Store_API">Data Store API,</a> который доступен только в ОС Firefox. За дополнительной информацией смотрите <a href="/en-US/docs/Web/API/Worker/Functions_and_classes_available_to_workers">Функции и классы доступные воркерам.</a></p> + +<p><span id="result_box" lang="ru"><span>Данные отправляются между потоком воркера и основным потоком через систему сообщений - обе стороны отправляют свои сообщения с помощью метода <code>postMessage ()</code> и отвечают на сообщения через обработчик события <code>onmessage</code> (сообщение содержится в атрибуте данных события </span></span> {{event("Message")}}. Данные копируются, а не используются совместно.</p> + +<p>Воркеры<span id="result_box" lang="ru"><span> могут, в свою очередь, создавать новых воркеров, в этом случае они должны иметь одно и то же происхождение - родительскую страницу.</span> <span>Кроме того, воркеры могут использовать </span></span><a class="internal" href="/en-US/docs/Web/API/XMLHttpRequest"><code>XMLHttpRequest</code></a><span lang="ru"><span> для сетевого ввода-вывода, за исключением того, что атрибуты <code>responseXML</code> и <code>channel </code>на XMLHttpRequest всегда возвращают значение <code>null</code>.</span></span></p> + +<p><span id="result_box" lang="ru"><span>В дополнение к специализированным существуют и другие виды воркеров:</span></span></p> + +<ul> + <li>Совместные воркеры<span id="result_box" lang="ru"><span> - это воркеры, которые могут использоваться несколькими скриптами совместно, работающими в разных окнах, IFrames и т.д. в пределах одного домена, что и воркер.</span> <span>Они немного сложнее, чем специализированные воркеры - скрипты должны связываться через активный порт.</span> <span>Подробнее см. {{domxref("SharedWorker")}}.</span></span></li> + <li><a href="/en-US/docs/Web/API/ServiceWorker_API">ServiceWorkers</a> <span id="result_box" lang="ru"><span>по сути действуют как прокси-серверы, которые находятся между веб-приложениями, а также браузером и сетью (если доступны).</span> Помимо прочего о<span>ни предназначены для создания эффективного автономного взаимодействия, перехвата сетевых запросов и принятия соответствующих мер на основе доступности сети и обновления данных на сервере.</span> <span>Они также позволят доступ к push-уведомлениям и API-интерфейсам фоновой синхронизации.</span></span></li> + <li>Воркеры в Chrome - это воркеры специального типа Firefox<span id="result_box" lang="ru"><span>, которые вы можете использовать, если вы разрабатываете надстройки и хотите использовать воркеры в расширениях и иметь доступ к js-ctypes в вашем воркере</span></span>. Смотрите также {{domxref("ChromeWorker")}}. </li> + <li><a href="/en-US/docs/Web/API/Web_Audio_API#Audio_Workers">Audio Workers</a>(аудио воркеры) <span id="result_box" lang="ru"><span>обеспечивают возможность прямой обработки аудиозаписей в рамках веб-контекста воркера.</span></span></li> +</ul> + +<div class="note"> +<p><span style="font-size: 14px; line-height: 21px;"><strong>Замечание</strong></span>: В соответствии с <a href="https://html.spec.whatwg.org/multipage/workers.html#runtime-script-errors-2">Web workers Spec</a>, события ошибок воркеров не должны "всплывать" (смотрите {{bug(1188141)}}. Такое поведение было реализовано в Firefox 42.</p> +</div> + +<h2 id="Интерфейсы_Web_воркера">Интерфейсы Web воркера</h2> + +<dl> + <dt>{{domxref("AbstractWorker")}}</dt> + <dd>Абстрактные свойства и методы общие для всех типов воркеров (т.е. {{domxref("Worker")}} или {{domxref("SharedWorker")}}).</dd> + <dt>{{domxref("Worker")}}</dt> + <dd><span id="result_box" lang="ru"><span>Представляет поток исполнения воркера, позволяющий передавать сообщения текущему коду воркера.</span></span></dd> + <dt>{{domxref("SharedWorker")}}</dt> + <dd><span id="result_box" lang="ru"><span>Представляет конкретный вид воркера, к которому можно получить доступ из нескольких контекстов, будь то несколько окон, iframe или даже воркеров.</span></span></dd> + <dt>{{domxref("WorkerGlobalScope")}}</dt> + <dd>Represents the generic scope of any worker (doing the same job as {{domxref("Window")}} does for normal web content). Different types of worker have scope objects that inherit from this interface and add more specific features.</dd> + <dt>{{domxref("DedicatedWorkerGlobalScope")}}</dt> + <dd>Represents the scope of a dedicated worker, inheriting from {{domxref("WorkerGlobalScope")}} and adding some dedicated features.</dd> + <dt>{{domxref("SharedWorkerGlobalScope")}}</dt> + <dd>Represents the scope of a shared worker, inheriting from {{domxref("WorkerGlobalScope")}} and adding some dedicated features.</dd> + <dt>{{domxref("WorkerNavigator")}}</dt> + <dd><span id="result_box" lang="ru"><span>Представляет идентификатор и состояние пользовательского агента (клиента)</span></span>.</dd> +</dl> + +<h2 id="Примеры">Примеры</h2> + +<p>Мы создали пару простых демонстрационных программ чтобы показать основы использования:</p> + +<ul> + <li><a href="https://github.com/mdn/simple-web-worker">Базовый пример отдельного воркера</a> (<a href="http://mdn.github.io/simple-web-worker/">запускает отдельного воркера</a>).</li> + <li><a href="https://github.com/mdn/simple-shared-worker">Базовый пример разделяемого воркера</a> (<a href="http://mdn.github.io/simple-shared-worker/">запускает разделяемого воркера</a>).</li> +</ul> + +<p>Больше информации о том, как работают эти демонстрационные программы, вы можете найти в статье <a href="/en-US/docs/Web/API/Web_Workers_API/Using_web_workers">Использование Web воркеров</a>.</p> + +<h2 id="Спецификации">Спецификации</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Спецификация</th> + <th scope="col">Статус</th> + <th scope="col">Комментарий</th> + </tr> + <tr> + <td>{{SpecName('HTML WHATWG', '#toc-workers')}}</td> + <td>{{Spec2('HTML WHATWG')}}</td> + <td>Не отличается от {{SpecName("Web Workers")}}.</td> + </tr> + <tr> + <td>{{SpecName('Web Workers')}}</td> + <td>{{Spec2('Web Workers')}}</td> + <td>Initial definition.</td> + </tr> + </tbody> +</table> + +<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2> + +<div>{{CompatibilityTable}}</div> + +<div id="compat-desktop"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Chrome</th> + <th>Firefox (Gecko)</th> + <th>Internet Explorer</th> + <th>Opera</th> + <th>Safari (WebKit)</th> + </tr> + <tr> + <td>Базовая поддержка</td> + <td>4</td> + <td>{{CompatGeckoDesktop(1.9.1)}}</td> + <td>10.0</td> + <td>10.6</td> + <td>4</td> + </tr> + <tr> + <td>Разделяемые воркеры</td> + <td>4</td> + <td>{{CompatGeckoDesktop(29)}}</td> + <td>{{CompatNo}}</td> + <td>10.6</td> + <td>4</td> + </tr> + <tr> + <td>Передача данных через использование структурного клонирования</td> + <td>13</td> + <td>{{CompatGeckoDesktop(8)}}</td> + <td>10.0</td> + <td>11.5</td> + <td>6</td> + </tr> + <tr> + <td>Передача данных с использованием передаваемых объектов</td> + <td>17 {{property_prefix("webkit")}}<br> + 21</td> + <td>{{CompatGeckoDesktop(18)}}</td> + <td>{{CompatNo}}</td> + <td>15</td> + <td>6</td> + </tr> + <tr> + <td>Глобальный {{domxref("window.URL", "URL")}}</td> + <td>10<sup>[1]</sup><br> + 23</td> + <td>{{CompatGeckoDesktop(21)}}</td> + <td>11</td> + <td>15</td> + <td>6<sup>[1]</sup></td> + </tr> + </tbody> +</table> +</div> + +<div id="compat-mobile"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Android</th> + <th>Chrome for Android</th> + <th>Firefox Mobile (Gecko)</th> + <th>Firefox OS (Gecko)</th> + <th>IE Phone</th> + <th>Opera Mobile</th> + <th>Safari Mobile</th> + </tr> + <tr> + <td>Базовая поддержка</td> + <td>4.4</td> + <td>4</td> + <td>{{CompatGeckoMobile(1.9.1)}}</td> + <td>1.0.1</td> + <td>10.0</td> + <td>11.5</td> + <td>5.1</td> + </tr> + <tr> + <td>Разделяемые воркеры</td> + <td>{{CompatNo}}</td> + <td>4</td> + <td>29</td> + <td>1.4</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td>Передача данных через использование структурного клонирования</td> + <td>{{CompatNo}}</td> + <td>4</td> + <td>8</td> + <td>1.0.1</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + <tr> + <td>Передача данных с использованием передаваемых объектов</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>18</td> + <td>1.0.1</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + </tbody> +</table> +</div> + +<p>[1] Как <code>webkitURL</code>.</p> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li><a href="/en-US/docs/Web/API/Web_Workers_API/basic_usage">Использование Web воркеров</a></li> + <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Worker">Worker Interface</a></li> + <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker">Интерфейс SharedWorker</a></li> + <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker_API">ServiceWorker API</a></li> + <li><a href="/en-US/docs/Web/API/Worker/Functions_and_classes_available_to_workers">Функции и классы доступные воркерам</a></li> + <li><a href="/en-US/docs/Web/API/Web_Workers_API/Advanced_concepts_and_examples">Продвинутые конфепции и примеры</a></li> + <li><a href="/en-US/docs/Web/API/ChromeWorker">ChromeWorker</a>: для использования воркеров в привелегированном/chrome коде</li> +</ul> diff --git a/files/ru/web/api/web_workers_api/structured_clone_algorithm/index.html b/files/ru/web/api/web_workers_api/structured_clone_algorithm/index.html new file mode 100644 index 0000000000..883d5d3122 --- /dev/null +++ b/files/ru/web/api/web_workers_api/structured_clone_algorithm/index.html @@ -0,0 +1,153 @@ +--- +title: Алгоритм структурированного клонирования +slug: Web/API/Web_Workers_API/Structured_clone_algorithm +translation_of: Web/API/Web_Workers_API/Structured_clone_algorithm +--- +<p>Алгоритм структурированного клонирования — это новый алгоритм, <a class="external" href="http://www.w3.org/html/wg/drafts/html/master/infrastructure.html#safe-passing-of-structured-data" title="http://www.w3.org/TR/html5/common-dom-interfaces.html#safe-passing-of-structured-data">определенный спецификацией HTML5</a> для сериализации комплексных JavaScript объектов. Он более функционален, чем <a href="/en/JSON" title="en/JSON">JSON</a> в том что способен поддерживать сериализацию объектов содержащих циклические графы — первичные объекты, которые ссылаются на другие объекты у которых есть ссылка на первичные объекты в том же графе. В дополнение, в некоторых других случаях алгоритм структурированного клонирования может быть более эффективен, чем JSON.</p> + +<p>Аглоритм, по существу, перебирает все поля оригинального объекта, дублируя значения каждого поля в новый объект. Если поле представляет из себя объект с собственными полями, то эти дочерние поля также перебираются рекурсивно, пока каждое поле и все дочерние поля не будут продублированы в новый объект.</p> + +<h2 id="Преимущества_перед_JSON">Преимущества перед JSON</h2> + +<p>Вот основные преимущества структурированного клонирования перед JSON:</p> + +<ul> + <li>Структурированные клоны могут копировать <a href="/en/JavaScript/Reference/Global_Objects/RegExp" title="en/JavaScript/Reference/Global Objects/regexp"><code>RegExp</code></a> объекты.</li> + <li>Структурированные клоны могут копировать {{ domxref("Blob") }}, {{ domxref("File") }}, и {{ domxref("FileList") }} объекты.</li> + <li>Структурированные клоны могут копировать {{ domxref("ImageData") }} объекты. The dimensions of the clone's {{ domxref("CanvasPixelArray") }} will match the original and have a duplicate of the same pixel data.</li> + <li>Structured clones can correctly duplicate objects containing cyclic graphs of references.</li> +</ul> + +<h2 id="Исключения_не_работающие_со_структурированными_клонами">Исключения, не работающие со структурированными клонами</h2> + +<ul> + <li><a href="/en/JavaScript/Reference/Global_Objects/Error" title="en/JavaScript/Reference/Global Objects/Error"><code>Error</code></a> and <a href="/en/JavaScript/Reference/Global_Objects/Function" title="en/JavaScript/Reference/Global Objects/Function"><code>Function</code></a> objects cannot be duplicated by the structured clone algorithm; attempting to do so will throw a <code>DATA_CLONE_ERR</code> exception.</li> + <li>Attempting to clone DOM nodes will likewise throw a <code>DATA_CLONE_ERR</code> exception.</li> + <li>Certain parameters of objects are not preserved: + <ul> + <li>The <code>lastIndex</code> field of <a href="/en/JavaScript/Reference/Global_Objects/RegExp" title="en/JavaScript/Reference/Global Objects/regexp"><code>RegExp</code></a> objects is not preserved.</li> + <li>Property descriptors, setters, and getters (as well as similar metadata-like features) are not duplicated. For example, if an object is marked read-only using a property descriptor, it will be read-write in the duplicate, since that's the default condition.</li> + <li>The prototype chain does not get walked and duplicated.</li> + </ul> + </li> +</ul> + +<h2 id="Поддерживаемые_типы">Поддерживаемые типы</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Object type</th> + <th scope="col">Notes</th> + </tr> + </thead> + <tbody> + <tr> + <td><a href="/en-US/docs/Web/JavaScript/Data_structures#Primitive_values">All primitive types</a></td> + <td>However not symbols</td> + </tr> + <tr> + <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean">Boolean</a> object</td> + <td></td> + </tr> + <tr> + <td>String object</td> + <td></td> + </tr> + <tr> + <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date">Date</a></td> + <td></td> + </tr> + <tr> + <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp">RegExp</a></td> + <td>The <code>lastIndex</code> field is not preserved.</td> + </tr> + <tr> + <td>{{ domxref("Blob") }}</td> + <td></td> + </tr> + <tr> + <td>{{ domxref("File") }}</td> + <td></td> + </tr> + <tr> + <td>{{ domxref("FileList") }}</td> + <td></td> + </tr> + <tr> + <td><a href="/en-US/docs/Web/API/ArrayBuffer">ArrayBuffer</a></td> + <td></td> + </tr> + <tr> + <td><a href="/en-US/docs/Web/API/ArrayBufferView">ArrayBufferView</a></td> + <td>This basically means all <a href="/en-US/docs/Web/JavaScript/Typed_arrays">typed arrays</a> like Int32Array etc.</td> + </tr> + <tr> + <td>{{ domxref("ImageData") }}</td> + <td></td> + </tr> + <tr> + <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</a></td> + <td></td> + </tr> + <tr> + <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object">Object</a></td> + <td>This just includes plain objects (e.g. from object literals)</td> + </tr> + <tr> + <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map">Map</a></td> + <td></td> + </tr> + <tr> + <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set">Set</a></td> + <td></td> + </tr> + </tbody> +</table> + +<h2 id="Другой_вариант_вложенное_копирование">Другой вариант: вложенное копирование</h2> + +<p>Если вы хотите сделать вложенную копию объекта (т.е рекурсивно копировать все вложенные свойства, проходя по прототипной цепи), вы должны использовать другой подход. Ниже приведен возможный пример.</p> + +<pre class="brush: js">function clone(objectToBeCloned) { + // Basis. + if (!(objectToBeCloned instanceof Object)) { + return objectToBeCloned; + } + + var objectClone; + + // Filter out special objects. + var Constructor = objectToBeCloned.constructor; + switch (Constructor) { + // Implement other special objects here. + case RegExp: + objectClone = new Constructor(objectToBeCloned); + break; + case Date: + objectClone = new Constructor(objectToBeCloned.getTime()); + break; + default: + objectClone = new Constructor(); + } + + // Clone each property. + for (var prop in objectToBeCloned) { + objectClone[prop] = clone(objectToBeCloned[prop]); + } + + return objectClone; +} +</pre> + +<div class="note"><strong> Note:</strong> Этот алгоритм реализован только для <a href="/en/JavaScript/Reference/Global_Objects/RegExp" title="RegExp"><code>RegExp</code></a>, <a href="/en/JavaScript/Reference/Global_Objects/Array" title="Array"><code>Array</code></a>, и <a href="/en/JavaScript/Reference/Global_Objects/Date" title="Date"><code>Date</code></a> специальных объектов. Вы можете реализовать другие условия, удовлетворяющие вашим потребностям.</div> + +<h2 id="Еще_по_теме">Еще по теме</h2> + +<ul> + <li><a class="external" href="http://www.w3.org/TR/html5/infrastructure.html#safe-passing-of-structured-data" title="http://www.w3.org/TR/html5/common-dom-interfaces.html#safe-passing-of-structured-data">HTML5 Specification: Safe passing of structured data</a></li> + <li>{{ domxref("window.history") }}</li> + <li>{{ domxref("window.postMessage()") }}</li> + <li><a href="/en-US/docs/Web/API/Web_Workers_API">Web Workers</a></li> + <li><a href="/en-US/docs/Components.utils.cloneInto">Components.utils.cloneInto</a></li> +</ul> |
