ウェブワーカーマルチスレッディング

   ウェブワーカースレッド

1つのブラウザ(例:あなたは並んで待つために、ウィンドウショッピングに行く)イベントキューにオペレーティングシステムによってスケジュールすべてのイベント、シングルスレッド処理キューイベントと実行するユーザーコードを(つまり、使用するブラウザシングルスレッド。ウェブ除く労働者)。

  そのため、ブラウザはこれらのいずれかのタスクを処理することができ、およびタスクが他のタスクの実行を防ぐことができます。

2コード「を決定する方法を速く十分」ユーザーエクスペリエンスの0.1秒:ユーザーは待つことなく、自由に操作することができ、0.2〜1.0秒の遅延は、ユーザが通知されるようになります。1秒以上あれば、ユーザーはスムーズに出来ます。10秒以上、ユーザーは非常にイライラすることができます。

  マニュアルコード検出:

<DIVのonclick = "jstest"> ... </ div>の

機能jstest(){ 
  VAR新しい新しい日付=スタート()getMilliseconds();. 
//これは、より高価なコードである
VAR = STOP時間-開始し、
アラート;(+時間+ "ミリ" "jstest()で実行されます")         
}

  パフォーマンスアナライザ放火犯

実行時間を監視するために、特定の時間にパフォーマンス統計、リアルタイムの検証コードまたは特定の実行を収集するために、コードの調査で特定のコードを含めることができます。後者の少ない歪み性能分析を購入するが、データの品質を取得された第1のポイントになります。あなたは(「送信」ボタンをクリックする)ことができます

そして、星放火犯パフォーマンスアナライザは、時間のかかるを表示します。

3スレッディング

使用するマルチスレッド剥離にユーザと対話するスレッドコードから大きなオーバーヘッド。基本的な問題は、マルチスレッドの異なるスレッドが同じアドレスにアクセスして変更することができます。(必要なのは、マルチスレッドの実行は次のようにマルチタスクができますが、として、各他のスレッドではない危険な侵襲的な方法)

4つのウェブワーカー

デ値のパッケージへのWebワーカーAPIを使用する方法を見てみましょう。以下は、労働者を作成して開始する方法を示しています。

//作成し始めるワーカー
VARワーカー=新しい新しいワーカー(「JS / decrypt.js」); 

//ワーカースレッドがメインにメッセージを送信するときに、イベントハンドラが実行された登録
worker.onmessage =機能(E){ 
  "警告(復号化された値は、「+ e.data)であり; 
} 

//者にメッセージを送信し、これは復号化されるべき値を指す
worker.postMessage(getValueToDecrypt()); 

で//次コンテンツJS / decrypt.js:
//レジスタメインスレッドからの情報を受信するためのハンドラ
のonMessage =関数(E){ 
  //上のデータ伝送取得
  VARをvalueToDecrypt = e.data; 
  // TODO:ここで実施復号関数は
  値がメインスレッドに戻される// 
  this.postMessage (decryptedValue); 
}

  労働者に委任する必要がありますjavascriptの操作重大なオーバーヘッド(例えば、長時間実行)のページでは、それはより速く実行することができます。

あなたは、WebワーカーAPIをサポートしていないブラウザを使用している場合5、あなたはギアワーカーAPIを使用することができます。コードは以下の通りであります:

//労働者のプールを作成し、それが労働者の生産ます
VARワーカプール= google.gears.factory.create(「beta.workpoolを」); 

//イベントハンドラを登録し、彼は労働者からの情報を受信
workerPool.onmessage =機能(ignorel、ignorel2 、E){ 
  アラート(+ e.body "DECRYPTEDの値である"); 
} 

//ワーカー作成
VARをworkerId = workerPool.createWorkerFromUrl( "JS / decrypt.js"); 

//は、作業者にこの情報を送信
workerPool.sendMessage( 。getValueToDecrpt()workerId); 

//次のギアバージョンJS / decrypt.jsである:

VAR =ワーカプールgoogle.gears.workerPool; 
workerPool.onmessage =関数(ignorel、ignorel2、Eは){ 
  //からのデータ転送を取得する
  VAR = e.body getValueToDecrpt; 
  // TODO:ここで実装カプセル化関数は、

  値がメインスレッドに戻される// 
  workerPool.sendMessage(decryptedValue、e.sender)。
}

  6.タイマー

funState = {} VAR; 
関数expensiveOperation(){ 
  VARのstartTime =新しい新しい日付()getMilliseconds();. 
  一方((新しい新しい日付()getMilliseconds() -のstartTime)<80){ 
    // TODO:これは、以下の方法により行われます多くのオーバーヘッドの操作が:
    //それは仕事がチャンクの反復で80ミリ秒以内に行わ行い、
    //その後の外部関数「機能」の現在の状態を変更します。
  } 
  IF {(FunState.isFinished!)
    // expensiveOperationを行う前に、出口10秒; 
    //、大きな値でテストパフォーマンスと応答Uiの間の適切なバランスを達成するために
    のsetTimeout(expensiveOperation()、10); 
  } 
}

  XHRHttpRequest:XHR同期および非同期実行モード。非同期モードでは、XHRは、基本的に専用のWebワーカーAPIを持っています。

  同期モードのようにXHR、遅延時間は、サーバからの全体的な応答を解決するためにXHRと時間のかかると彼の要求を送信するために持続的なユーザーインターフェースにつながります。また、予測不可能なユーザインタフェース耐え難い遅延につながります。

 

おすすめ

転載: www.cnblogs.com/yaosusu/p/11272023.html