2013-07-12 8 views
9

Desidero separare il thread sulla pagina per impedire il congelamento della GUI. Per questo, sto eseguendo la funzione che congelerà gui all'interno di un altro thread con setTimeout ma ancora in congelamento.Esecuzione di codice all'interno di un altro thread in javascript

Il codice e il link jsbin sono qui sotto:

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

Che verrà comunque eseguito nello stesso thread. Tutto verrà eseguito nello stesso thread. L'unica eccezione è WebWorkers. – mishik

+0

ma le richieste jquery ajax funzionano in thread diversi se diciamo 'async: true'. Ora sto cercando di trovare buone informazioni sui webworkers. Ho bisogno di eseguire qualcosa in altri thread mentre gui è ancora tangibile e carica altri dati dalla rete. – uzay95

+1

Il callback per quella richiesta ajax verrà comunque eseguito nello stesso thread. 'async: true' significa solo che il browser può impiegare del tempo a gestire altre attività mentre attende i risultati delle chiamate ajax. – mishik

risposta

7

Anche sebbene tu abbia delegato l'esecuzione tramite setTimeout, verrà comunque eseguito nello stesso thread singolo, aspetterà solo il suo tempo in coda e rimanderà qualsiasi altra attività fino a quando non verrà completata.

prega di fare riferimento a questo quadro impressionante da "I segreti di JS Ninja" libro:

enter image description here

3

javascript (browser) è una singola applicazione filo, quindi, anche se si utilizza un setTimeout in qualsiasi punto del tempo ci sarà solo un thread in esecuzione (fare esecuzione di script, riverniciarli, ecc.). Per saperne di più su come il timers work here

Dal momento che si dispone di uno script in esecuzione in ogni millisecondo si congelerà il filo bloccando così l'interfaccia utente

2

Javascript non è multithreaded, si consiglia di guardare Web Workers

Problemi correlati