2012-03-08 28 views
8

örn. konuların miktarı, başa olmak var varsayarak Webworker'ın kendisi çok parçalı mı?

 

worker.postMessage(data1); 
worker.postMessage(data2); 
 

Ve webwoker iç

, olur worker.postMessage(data2) blok tek işçi kuyrukta görevini, zamanında yani bir görev yürütür data1

+0

İşçiniz hangi görevi gerçekleştiriyor? Hesaplama? Ajax? –

cevap

5

tamamlamadan önce.

<!DOCTYPE html> 

<script> 

var worker = new Worker('worker.js'); 
worker.postMessage({ task: 1, iterations: 100 }); // very slow task 
worker.postMessage({ task: 2, iterations: 1 }); // very quick task 
worker.onmessage = function(event) { 
    console.log(event.data); 
}; 

</script> 

worker.js:

self.onmessage = function(event) { 
    for (var i = 0; i < event.data.iterations * 1000 * 1000 * 10; i++) {}; 
    self.postMessage("Finished task " + event.data.task); 
} 

Çıkışı: Aşağıdaki örneği deneyin

Finished task 1 
Finished task 2 

görevler hep, sırayla hızlı bir sonra yani ilk yavaş birini tamamladığınızda . (Görev paralel olarak yürütüldüyse, ikinci görev ilk önce net bir kenar boşluğuyla sonlanır.)

(Sadece açık olmak gerekirse: postMessage öğesini çağırmak her zaman yürütme bağlamında engeller (herhangi bir işlev çağrısı olarak) ancak hemen "hemen döndürür" ", iletinin kendisini çok hızlı bir şekilde göndermesi nedeniyle. Bu, muhtemelen sizin sorduğunuz şey değil.)

Not: Worker.js'yi yerel diskten yüklemeye çalışırsanız, Chrome bir güvenlik istisnası atar, Safari & Firefox'ta çalışır.

İlgili konular