2013-07-12 11 views
9

guiのフリーズを防ぐために、ページ上のスレッドを分離したいと思います。このため、setTimeoutを使って別のスレッド内でguiをフリーズするが、まだフリーズする関数を実行しています。javascript内の別のスレッド内でコードを実行しています

コードとjsbinリンクは以下の通りです:

<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js" 
    type="text/javascript"></script> 
    <meta charset="utf-8" /> 
</head> 
<body> 
    <div id="div1"></div> 
    <div id="div2"></div> 
    <input type="button" value="düðme" id="btn" /> 

    <script type="text/javascript"> 
     $("#btn").on("click",function(){ 
     $("#div1").html(new Date()); 
     }); 

     $(document).ready(function(){ 
     setTimeout(function() { count(); },1); 
     }); 

     function count(){ 
     for(var i =0;i<100000;i++){ 
      $("#div2").html(i); 
     } 
      $("#div2").append(new Date()); 
     } 
    </script> 

</body> 
</html> 
+2

。すべてが同じスレッドで実行されます。唯一の例外はWebWorkersです。 – mishik

+0

jquery ajaxリクエストは、 'async:true'と言うと、別のスレッドで動作しています。私は現在、ウェブワーカーに関する良い情報を探しています。私はguiがまだタッチ可能で、ネットワークから別のデータをロードしている間に、他のスレッドで何かを実行する必要があります。 – uzay95

+1

そのajaxリクエストのコールバックは、同じスレッドで実行されます。 'async:true'は、ブラウザがajaxの呼び出し結果を待っている間に、他のタスクを扱う時間をブラウザが費やすことができることを意味します。 – mishik

答えて

7

を見てみたいことがありsetTimeoutを介して実行を委任しても、それは同じ単一スレッドで実行されますが、キュー内の時間だけ待機し、完了するまで他のアクティビティを延期します。

は著書「JS忍者の秘密」からこの素晴らしい絵を参考にしてください。まだ同じスレッドで実行されます

enter image description here

3

ジャバスクリプト(ブラウザ)はシングルスレッドアプリケーションであるので、あなたは時間の任意の時点でのsetTimeoutを使用している場合でも実行している唯一のスレッド(実行があるだろうスクリプト実行、UI再描画など)。スクリプトがミリ秒ごとに実行されているのでtimers work here

が、それはこのように

2

Javascriptがマルチスレッド化されていないUIをブロックするスレッドを凍結する方法についての詳細を読んで、あなたもWeb Workers

関連する問題