次のコードを使用して webworker を実行し、最新の Google Chrome の Web ページで素数を処理しています
https://dl.dropbox.com/u/655237/project/prime.html
ただし、Worker の開始ボタンをクリックすると、停止ボタンがしばらく反応しなくなります。30 秒ほど経過すると、マウスをホバーするとアクティブになります。これは Firefox では発生しません。
コードに欠陥はありますか?
プライム.html
<section>
Last Prime Found:- <p id="number">NA</p>
<button id="prime">Find Prime</button>
<button id="primew">Start Worker</button>
<button id="primes">Stop Worker</button>
</section>
<script>
var worker;
document.querySelector('#prime').addEventListener('click', function () {
findPrime();
}, false);
document.querySelector('#primew').addEventListener('click', function () {
findPrimeW();
}, false);
document.querySelector('#primes').addEventListener('click', function () {
stopWorker();
}, false);
function findPrime(){
var n = 1;
search: while (true) {
n += 1;
for (var i = 2; i <= Math.sqrt(n); i += 1)
if (n % i == 0)
continue search;
// found a prime!
document.querySelector("#number").textContent=n;
}
}
function findPrimeW(){
worker = new Worker('js/worker1.js');
worker.onmessage = function (event) {
document.querySelector("#number").textContent = event.data;
};
}
function stopWorker()
{
worker.terminate();
}
</script>
worker1.js
var n = 1;
search: while (true) {
n += 1;
for (var i = 2; i <= Math.sqrt(n); i += 1)
if (n % i == 0)
continue search;
// found a prime!
postMessage(n);
}
別の例はこれです https://dl.dropbox.com/u/655237/events/gdg-html5/index.html#/webworkers
「Start Worker」ボタンをクリックしてからしばらくの間、スライドを変更できません。理想的には、重い計算は別の Web ワーカーに委譲されるため、これは発生しないはずです。