ホームページ  >  記事  >  ウェブフロントエンド  >  HTML5:WebソケットとWebワーカー

HTML5:WebソケットとWebワーカー

高洛峰
高洛峰オリジナル
2016-10-17 09:52:481488ブラウズ

演習中に、Web ワーカーはページのパフォーマンスに影響しますか?という多肢選択式の質問が出題されました。家庭教師後は影響しないというのが答えです。

Web ワーカーについて学ぶために関連情報を参照し、Web ソケットに出会いました。要約は次のとおりです。

Web ソケットとワーカーの機能: 高性能 Web アプリケーションを構築するための新しいリファレンス ソリューションを提供します。

Web ソケットはより効率的な送信プロトコルを提供し、Web ワーカーは Web アプリケーションの計算効率を向上させるマルチスレッドを提供します。

一.webソケット

1.webソケットはプロトコルであり、本質的にはhttpやtcpと同じです。このプロトコルは、socket.io を使用して小さなオンライン チャットを作成し、プロジェクトを要約するために使用されます。

2. Web ソケットには 2 つのプレフィックスがあります: (1) ws:// は暗号化されません。 (2)wss://は暗号化されています。

3. クライアントとサーバーが Web ソケットと対話する方法は、「http ハンドシェイク + tcp データ送信」方式としても理解できます。

(1) ブラウザー (Websocket をサポートするブラウザー) がリクエストを開始します。サーバーからの応答を待ちます。

(2) サーバーはハンドシェイク応答を返し、websocket で指定されたデータ形式に従って後続のデータを渡すようにブラウザーに指示します。

(3) ブラウザーとの間のソケット接続。サーバーは中断されません。現時点で、この接続と http の違いは、二重であることです。

(4) ブラウザーとサーバーに転送する必要があるデータがある場合、データ転送にこの長い接続を使用します。

注: HTTP ハンドシェイク: これは、長い接続を確立する際のブラウザとサーバー間のハンドシェイク プロセスが、リクエスト、リクエスト ヘッダー、レスポンス、レスポンス ヘッダーを含む HTTP1.1 プロトコルに従って送信されるためです。ただし、ヘッダーのフィールドには特定の意味があるという点が異なります。

TCP 送信: 主に、長時間の接続を確立した後、ブラウザーがサーバーにデータを送信でき、サーバーもブラウザーにリクエストを送信できるという事実に反映されています。もちろん、そのデータ形式は独自に定義されているわけではありません。送信されるデータの外層には、wsプロトコルで規定されるアウターパケットが存在します。

4. データ送信プロセス: WebSocket のデータ送信形式は次のとおりです。たとえば、メッセージはいくつかのフレームに分割され、順番に送信されます。これにはいくつかの利点があります:

(1) データのサイズによって引き起こされる長さ不足フラグを考慮せずに、大きなデータの送信をフラグメントで送信できます。

(2) HTTPチャンクと同様に、データを送信しながらメッセージを生成できるため、送信効率が向上します。

5. クライアントは Web ソケット構文: JavaScript を使用します。

サーバー: 複数の Web フレームワークをサポートします。

二.web ワーカー

1. HTML ページでスクリプトを実行すると、スクリプトが完了するまでページは応答しません。

Web ワーカーは、他のスクリプトから独立してバックグラウンドで実行される JavaScript であり、ページのパフォーマンスには影響しません。 Web ワーカーがバックグラウンドで実行されている間、クリックや選択など、必要な操作を続行できます。

DOM 操作に加えて、理論的にはあらゆる JS スクリプト タスクをワーカーに入れて実行できます。構文上の制限として、ドメインを越えて JS にアクセスすることはできません。ワーカーは、フロントエンド ユーザーの操作をよりわかりやすくするために、つまり、ユーザー エクスペリエンスの観点からサービスのパフォーマンスを向上させるために、多くの時間と CPU リソースを必要とする複雑な計算に使用されることがよくあります。

2. Web ワーカーの使用法: (Web ワーカー オブジェクトを作成すると、終了するまで (外部スクリプトが完了した後でも) メッセージをリッスンし続けます。)

(1) 「onmessage」を追加することによってWeb ワーカーに「受信メッセージを取得するイベント リスナー。

メッセージ送信:postMessage()

Webワーカーを終了し、ブラウザ/コンピュータリソースを解放:terminate()

var worker =new Worker("worker_job.js"); //创建一个Worker对象并向它传递将在新线程中执行的脚本的URL

 worker.postMessage("hello world");     //向worker发送数据
 
 worker.onmessage =function(evt){     //接收worker传过来的数据函数
   console.log(evt.data);              //输出worker发送来的数据
 }

(2) イベントリスナーを追加してメッセージを処理し、self経由でmain関数と通信します。ワーカー内部の関数 スレッド通信:

self.addEventListener('message', function(e) {
    var data = e.data;
    if(data == 'init')
        init();
    else
        ...
}, false);

self.postMessage("hello worker");

参考資料:

WebソケットとWebワーカーの基本原理と使い方

HTTPプロトコルチャンクエンコーディング(チャンク転送エンコーディング)

7つのWebソケットフレームワークのパフォーマンス比較


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