2013-07-12 10 views
9

Ich möchte Thread auf der Seite trennen, um das Einfrieren von GUI zu verhindern. Dazu führe ich die Funktion aus, die gui in einem anderen Thread mit setTimeout einfriert, aber immer noch einfriert.Laufender Code in einem anderen Thread in Javascript

Der Code und jsbin Link ist unter:

<!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

Das wird noch im selben Thread ausgeführt werden. Alles wird in demselben Thread ausgeführt. Die einzige Ausnahme ist WebWorker. – mishik

+0

aber jquery ajax Anfragen funktionieren in einem anderen Thread, wenn wir 'async: true' sagen. Ich suche jetzt nach guten Informationen über Webworker. Ich muss etwas in anderen Threads ausführen, während gui noch berührbar ist und andere Daten aus dem Netzwerk lädt. – uzay95

+1

Der Rückruf für diese Ajax-Anforderung wird weiterhin im selben Thread ausgeführt. 'async: true' bedeutet nur, dass der Browser einige Zeit damit verbringen kann, sich mit anderen Aufgaben zu beschäftigen, während er auf Ajax-Anrufergebnisse wartet. – mishik

Antwort

7

aussehen wollen Selbst Obwohl Sie die Ausführung über setTimeout delegiert haben, wird es immer noch in demselben Thread ausgeführt, es wartet nur auf seine Zeit in der Warteschlange und verschiebt alle anderen Aktivitäten, bis es fertig ist.

Bitte lesen Sie dieses tolle Bild von "Secrets of JS Ninja" Buch:

enter image description here

3

Javascript (Browser) ist eine einzelne Thread-Anwendung, so dass selbst wenn Sie einen SetTimeout an jedem Punkt der Zeit verwenden, wird es nur ein Thread ausgeführt wird (tut Skriptausführung, ui neu streichen usw.). Lesen Sie mehr darüber, wie die timers work here

Da Sie ein Skript in jeder Millisekunde ausgeführt haben wird es den Faden so zufrieren Blockierung der UI

Verwandte Themen