検索

1. 概要

JavaScriptこの言語はシングルスレッドモデル、つまりすべてのタスクを使用しますqueue は一度に 1 つのことしか実行できませんが、コンピューターの処理能力が向上すると、JavaScript の可能性を十分に発揮できなくなります。ローカル ファイルを読み取る場合はさらに当てはまります。Web Worker の目的は、JavaScript 用のマルチスレッド環境を作成し、メイン スレッドの実行中にメイン スレッドが一部のタスクをサブスレッドに割り当てられるようにすることです。この 2 つはバックグラウンドで相互に干渉しません。サブスレッドが計算タスクを完了すると、結果がメインスレッドに返されます。したがって、各サブスレッドは静かに作業を完了します。 Web Worker には次のような機能があります:

同一ドメイン制限: サブスレッドによってロードされるスクリプト ファイルは、メイン スレッドのスクリプト ファイルと同じドメインに存在する必要があります。サブスレッドは、制限された Web ページの DOM オブジェクトを読み取ることはできません。つまり、 document 、 window、および親オブジェクトは、サブスレッドによって取得できません (ただし、navigator オブジェクトと location オブジェクトは取得できます)。

スクリプトの制限: サブスレッドは、Web ページのグローバル変数や関数を読み取ることも、アラートや確認メソッドを実行することもできませんが、setInterval と setTimeout を実行し、XMLHttpRequest オブジェクトを使用して AJAX リクエストを行うことはできます。
  • ファイル制限: 子スレッドはローカル ファイルを読み取ることができません。つまり、子スレッドはローカル ファイル システム (file://) を開くことができません。ロードされたスクリプトは、
  • 使用する前にネットワークから取得する必要があります。 、ブラウザがこの API をサポートしているかどうかを確認してください。サポートされているブラウザには、IE 10 以降、Firefox 3.6 以降、Safari 4.0 以降、Chrome および Opera 11 が含まれますが、モバイル ブラウザはまだサポートされていません
  • でサブスレッドを作成して開始します。メインスレッドでは、

    new

    コマンドを使用して Worker メソッドを呼び出し、新しいサブスレッドを作成します。これは、子スレッドが完了する必要があるスクリプト ファイルです。上記のコードは work.js です。子スレッドはローカル ファイル システムを読み取ることができないため、このスクリプト ファイルはネットワークから取得される必要があります (404 エラーなど)。この子スレッドはサイレントに失敗します。
  • 子スレッドが作成された後は、メインスレッドが postMessage メソッドを呼び出すまで待機する必要があります。つまり、シグナルが送信されるまで子スレッドは開始されません。
  • if (window.Worker) {    // 支持} else {    // 不支持}

    postMessage メソッドのパラメータは、メインスレッドから子スレッドに渡されるシグナル。

    string
  • またはオブジェクトのいずれかになります。
var worker = new Worker('work.js');

3. サブスレッドの

イベント

監視

サブスレッドには、メッセージイベントを監視するためのコールバック関数が必要です。

worker.postMessage('hello world');

selfはサブスレッドそのものを表し、self.addEventListenerはサブスレッドのメッセージイベントに対するコールバック関数を指定することを意味します(onmessage

属性

の値を直接指定することもできます)。コールバック

関数のパラメータ

はイベント オブジェクトであり、その data 属性にはメインスレッドによって送信されたシグナルが含まれます。 self.postMessage は、子スレッドがメインスレッドにシグナルを送信することを意味します。 メインスレッドによって送信されたさまざまなシグナル値に従って、サブスレッドはさまざまなメソッドを呼び出すことができます。

worker.postMessage({method: 'each', args: ['work']});

4. メインスレッドのイベント監視 メインスレッドは、子スレッドによって送信されたシグナルをリッスンするために、メッセージ イベントのコールバック関数も指定する必要があります。

//File: work.jsself.addEventListener('message', function(e) {

    self.postMessage('You said: ' + e.data);

}, false);

5. エラー処理

メインスレッドは子スレッドでエラーが発生したかどうかを監視できます。エラーが発生すると、メインスレッドのエラーイベントがトリガーされます。

'message',  method = args = reply =);
6. 子スレッドを閉じる使用後、システムリソースを節約するために、メインスレッドでterminateメソッドを呼び出して子スレッドを手動で閉じる必要があります。

// File: main.jsworker.addEventListener('message', function(e) {
    console.log(e.data);
}, false);

子スレッドで内部的に閉じることもできます。

worker.onerror(function(e) {
    console.log(e);
});// orworker.addEventListener('error', function(e) {
    console.log(e);
}, false);

7. メインスレッドとサブスレッド間のデータ通信

メインスレッドとサブスレッド間の通信内容はテキストでもオブジェクトでも構いません。この種の通信はコピー関係、つまり、サブスレッドによる通信内容の変更はメインスレッドには影響を与えないことに注意してください。実際、ブラウザの内部動作メカニズムは、まず通信コンテンツをシリアル化し、次にシリアル化された文字列を子スレッドに送信し、子スレッドがそれを復元します。

メインスレッドとサブスレッドは、File、Blob、ArrayBuffer、その他のオブジェクトなどのバイナリデータを交換したり、スレッド間で送信したりすることもできます。

但是,用拷贝方式发送二进制数据,会造成性能问题。比如,主线程向子线程发送一个500MB文件,默认情况下浏览器会生成一个原文件的拷贝。为了解决这个问题,JavaScript允许主线程把二进制数据直接转移给子线程,但是一旦转移,主线程就无法再使用这些二进制数据了,这是为了防止出现多个线程同时修改数据的麻烦局面。这种转移数据的方法,叫做Transferable Objects。

如果要使用该方法,postMessage方法的最后一个参数必须是一个数组,用来指定前面发送的哪些值可以被转移给子线程。

worker.postMessage(arrayBuffer, [arrayBuffer]);

8、同页面的Web Worker

通常情况下,子线程载入的是一个单独的JavaScript文件,但是也可以载入与主线程在同一个网页的代码。假设网页代码如下:

<!DOCTYPE html>
    <body>
        <script id="worker" type="app/worker">

            addEventListener(&#39;message&#39;, function() {
                postMessage(&#39;Im reading Tech.pro&#39;);
            }, false);        </script>
    </body></html>

我们可以读取页面的script,用worker来处理。

var blob = new Blob([document.querySelector(&#39;#workere&#39;).textContent]);

这里需要把代码当作二进制数据读取,所以使用Blob接口。然后,这个二进制对象转为URL,再通过这个URL创建worker。

var url = window.URL.createObjectURL(blob);var worker = new Worker(url);

部署事件监听代码。

worker.addEventListener(&#39;message&#39;, function(e) {
    console.log(e.data);
}, false);

最后启动worker。

worker.postMessage(&#39;&#39;);

整个页面的代码如下:


    
        

        <script>
            (function() {                
            var blob = new Blob([document.querySelector(&#39;#worker&#39;).textContent]);                
            var url = window.URL.createObjectURL(blob);                
            var worker = new Worker(url);

                worker.addEventListener(&#39;message&#39;, function(e) {
                    console.log(e.data);
                }, false);

                worker.postMessage(&amp;#39;&amp;#39;);
            })();        </script>
    

可以看到,主线程和子线程的代码都在同一个网页上面。

上面所讲的Web Worker都是专属于某个网页的,当该网页关闭,worker就自动结束。除此之外,还有一种共享式的Web Worker,允许多个浏览器窗口共享同一个worker,只有当所有窗口关闭,它才会结束。这种共享式的Worker用SharedWorker对象来创建,因为适用场合不多,这里就省略了。

以上がHTML5 の新機能 Web ワーカーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
H5とHTML5の接続:類似性と相違点H5とHTML5の接続:類似性と相違点Apr 24, 2025 am 12:01 AM

H5とHTML5は異なる概念です。HTML5は、新しい要素とAPIを含むHTMLのバージョンです。 H5は、HTML5に基づくモバイルアプリケーション開発フレームワークです。 HTML5はブラウザを介してコードを解析およびレンダリングしますが、H5アプリケーションはコンテナを実行し、JavaScriptを介してネイティブコードと対話する必要があります。

H5コードの構成要素:キー要素とその目的H5コードの構成要素:キー要素とその目的Apr 23, 2025 am 12:09 AM

HTML5の重要な要素には、最新のWebページの構築に使用される、、,,,,などが含まれます。 1.ヘッドコンテンツを定義します。2。リンクをナビゲートするために使用されます。3。独立した記事のコンテンツを表します。4。ページコンテンツを整理します。5。サイドバーコンテンツを表示します。

HTML5およびH5:一般的な使用法の理解HTML5およびH5:一般的な使用法の理解Apr 22, 2025 am 12:01 AM

HTML5とHTML5の略語であるHTML5とH5の間に違いはありません。 1.HTML5はHTMLの5番目のバージョンであり、Webページのマルチメディア関数とインタラクティブ機能を強化します。 2.H5は、HTML5ベースのモバイルWebページまたはアプリケーションを参照するためによく使用され、さまざまなモバイルデバイスに適しています。

HTML5:現代のウェブのビルディングブロック(H5)HTML5:現代のウェブのビルディングブロック(H5)Apr 21, 2025 am 12:05 AM

HTML5は、W3Cによって標準化されたHyperText Markup言語の最新バージョンです。 HTML5は、新しいセマンティックタグ、マルチメディアサポート、フォームの強化、Web構造の改善、ユーザーエクスペリエンス、SEO効果を導入します。 HTML5は、Webページ構造をより明確にし、SEO効果をより良くするために、、、、、、などの新しいセマンティックタグを導入します。 HTML5はマルチメディア要素をサポートしており、サードパーティのプラグインは不要で、ユーザーエクスペリエンスと読み込み速度が向上します。 HTML5はフォーム関数を強化し、ユーザーエクスペリエンスを向上させ、フォーム検証効率を向上させるなどの新しい入力タイプを導入します。

H5コード:クリーンで効率的なHTML5の書き込みH5コード:クリーンで効率的なHTML5の書き込みApr 20, 2025 am 12:06 AM

クリーンで効率的なHTML5コードを書き込む方法は?答えは、タグのセマンティック、構造化されたコード、パフォーマンスの最適化、一般的な間違いを回避することにより、一般的な間違いを避けることです。 1.コードの読みやすさとSEO効果を改善するには、セマンティックタグなどを使用します。 2。適切なインデントとコメントを使用して、コードを構造化して読みやすいままにします。 3.不必要なタグを減らし、CDNを使用してコードを圧縮することにより、パフォーマンスを最適化します。 4.タグが閉じていないなどの一般的な間違いを避け、コードの有効性を確認してください。

H5:ウェブ上のユーザーエクスペリエンスをどのように強化するかH5:ウェブ上のユーザーエクスペリエンスをどのように強化するかApr 19, 2025 am 12:08 AM

H5は、マルチメディアサポート、オフラインストレージ、パフォーマンスの最適化により、Webユーザーエクスペリエンスを向上させます。 1)マルチメディアサポート:H5と要素は、開発を簡素化し、ユーザーエクスペリエンスを向上させます。 2)オフラインストレージ:WebStorageとIndexEdDBは、エクスペリエンスを改善するためにオフラインで使用できるようにします。 3)パフォーマンスの最適化:ウェブワーカーと要素は、パフォーマンスを最適化して帯域幅の消費を削減します。

H5コードの分解:タグ、要素、属性H5コードの分解:タグ、要素、属性Apr 18, 2025 am 12:06 AM

HTML5コードは、タグ、要素、属性で構成されています。1。タグはコンテンツタイプを定義し、などの角度ブラケットに囲まれています。 2。要素は、startタグ、内容、および内容などのエンドタグで構成されています。 3。属性は、開始タグのキー値のペアを定義し、ような関数を強化します。これらは、Web構造を構築するための基本ユニットです。

H5コードの理解:HTML5の基礎H5コードの理解:HTML5の基礎Apr 17, 2025 am 12:08 AM

HTML5は、最新のWebページを構築するための重要なテクノロジーであり、多くの新しい要素と機能を提供します。 1。HTML5は、Webページの構造とSEOを強化するなどのセマンティック要素を導入します。 2。プラグインなしのマルチメディア要素と埋め込みメディアをサポートします。 3.フォームは、新しい入力タイプと検証プロパティを強化し、検証プロセスを簡素化します。 4.オフラインおよびローカルストレージ機能を提供して、Webページのパフォーマンスとユーザーエクスペリエンスを向上させます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい