JavaScript でのマルチスレッド化に Web ワーカーを使用する方法

Javascript Denomaruchisureddo Huani Web Wakawo Shi Yongsuru Fang Fa



JavaScript では、サイトのユーザー インターフェイス全体を強化するための複数のアプローチがあります。の 「ウェブワーカー」 これは、メインスレッドがブロックされることなく実行を継続できるようにするアプローチの 1 つです。これは別個の JavaScript エンジン インスタンスで構成されているため、メイン スレッドの機能を呼び出すことができません。

この記事ではその活用方法について説明します 「ウェブワーカー」 JavaScript のマルチスレッド用。







Web ワーカーとは何ですか?

「ウェブワーカー」 JavaScript が別個の専用スレッドでタスクを並列または同時に実行できるようにするブラウザ API に対応します。



Web ワーカーのニーズとは何ですか?

したがって、JavaScript はシングルスレッドであるため、複雑な JavaScript コードが UI スレッドをブロックします。つまり、更新やユーザー入力イベントの実装などのすべてのタスクに対応するメイン ウィンドウを停止します。このようなシナリオでは、ユーザー エクスペリエンスが影響を受けます。 。この問題に対処するために、 「ウェブワーカー」 が有効になり、UI スレッドのブロックが解決されます。



Web ワーカーを JavaScript でマルチスレッド化するために使用する方法

作ります 「ウェブワーカー」 、Worker コンストラクターを利用します。これは、必要な機能を実装するワーカー スクリプト ファイルのパスに対応する URL を引数として受け取ります。ただし、ワーカー コードを HTML ファイルに含めるには、 「ブロブ」 ワーカーコードを書きます。





構文 (Web ワーカーの作成)

定数 バツ = 新しい ワーカー ( 「ワーカー.js」 ;

構文(ワーカーへのメッセージ送信)



定数 バツ = 新しい ワーカー ( 「ワーカー.js」 ;

構文(ワーカーからのメッセージ受信)

バツ。 メッセージについて = 関数 ( イベント {
コンソール。 ログ ( イベント。 データ ;
} ;

例: JavaScript で数値の階乗を計算するための「Web Worker」の利用
次の例では、 'ワーカー()' Web ワーカーを作成し、数値の階乗を計算するコンストラクター:

DOCTYPE html >
< html >
< >
< h2 スタイル = 'テキスト整列: 中央;' > Web ワーカーの例 h2 >
>
< >
< 脚本 >
定数 バツ = 新しい ワーカー ( URL。 createObjectURL ( 新しい ブロブ ( [
`
// ワーカースクリプト
定数 事実 = ( n => {
もし ( n == 0 || n == 1 {
戻る 1n ;
}
それ以外 {
戻る BigInt ( n * 事実 ( BigInt ( n - 1n ;
}
} ;
自己。 メッセージについて = ( イベント => {
定数 = 事実 ( イベント。 データ ;
自己。 投稿メッセージ ( と。 toString ( ;
} ; `
{ タイプ : 「テキスト/JavaScript」 } ;
バツ。 投稿メッセージ ( 15n ;
バツ。 メッセージについて = ( イベント => {
定数 = イベント。 データ ;
コンソール。 ログ ( 「Web ワーカー経由の 15 の階乗 -> 」 ;
} ;

>

html >

このコードでは、次の手順を適用します。

  • まず、記載されている見出しを指定します。
  • その後、 「ウェブワーカー」 ワーカーのコードを構成する Blob オブジェクトの URL を持つオブジェクト。
  • ワーカー専用のコードは、再帰関数を介して数値の階乗を計算する匿名関数に含まれています。
  • また、ワーカーは、 「self.onmessage」 イベントを呼び出して、渡された数値の階乗を取得し、結果をメインスレッドに渡します。 「postMessage()」 方法。
  • メインスレッドでワーカーインスタンスを作成し、番号「」を含むメッセージを送信します。 15n ”。ここ、 ' n 」は「BigInt」値を指します。
  • ワーカーは階乗の計算を完了すると、 「postMessage()」 方法。
  • 最後に、メインスレッドは結果をフェッチ/受信します。 「オンメッセージ」 イベントを取得し、コンソール上の数値の対応する階乗を返します。

出力

Web ワーカーの利点

並列処理 : 同じコードを並列実行する場合。

コード実行を中断しない: コードの実行は、現在のページの更新などに関係なく行われます。

動きの追跡: すべてのモーション検出はバックグラウンド ワーカーで行われます。

有効なマルチスレッド: これらにより、JavaScript でのマルチスレッドが可能になります。

強化されたパフォーマンス: 集中的または困難なタスクを別のスレッドで実行することで、パフォーマンスを最適化します。

効果的なユーザーエクスペリエンス: これらにより、メイン スレッドのブロックが回避され、応答性の高いユーザー エクスペリエンスが得られます。

Web ワーカーの制限

ただし、Web ワーカーにもいくつかの制限があります。これらは次のように述べられています。

  • メモリの使用率が向上します。
  • ワーカー スレッドで DOM を更新したり、ウィンドウ オブジェクトを呼び出したりすることはできません。

結論

「ウェブワーカー」 JavaScript が別個の専用スレッドでタスクを同時に実行できるようにするブラウザ API に対応します。これらは、ワーカー スクリプト ファイルのパスに対応する URL を引数として受け取ることで利用できます。このブログでは、JavaScript でのマルチスレッド化のための「Web Workers」の使用法について説明しました。