2013-07-05 97 views
1

在我的web應用程序中,我經常不得不重新實例化Worker對象,因爲沒有辦法將新腳本傳遞給舊的現有對象。過了一段時間,一些瀏覽器開始阻止創建新的Worker對象,因爲它們可以達到一個窗口的Worker限制。我試圖在創建新的工作對象之前刪除完成的工作對象,但顯然我以錯誤的方式進行了操作。下面是一個簡單的測試,從而未能在歌劇(上限爲每個窗口256名工人):如何刪除JavaScript中的Worker對象?

var worker;  
for(var i = 0; i < 300; i++) { 
    for (var key in worker) worker[key] = null; 
    delete worker.onmessage; 
    delete worker.onerror; 
    delete worker; 
    worker = new Worker("script.js"); 
} 

我的問題是如何徹底刪除一個工人對象,從而使瀏覽器限制將永遠無法實現?謝謝!

回答

1

不確定這是否可以與網絡工作者一起使用。你在窗口上創建對象嗎?如果是這樣你可以試試這個:

delete window.worker 

也許調用終止,然後刪除它?

window.worker.terminate(); 
delete window.worker; 

documentation狀態,它會停止一切,但不清理結束時()被調用。

+0

是的,似乎工人必須被終止,如果你想完全刪除它。謝謝。 –

1

您需要終止worker,而不是刪除該對象。所有刪除對象都是刪除指向worker的指針。根據我的經驗,有太多的OPEN worker是一個問題,它會阻止你的程序工作,但對於通過self.close()關閉的工作人員沒有限制。在worker或worker.terminate()中;在主要腳本中。如果您正確關閉工作人員,則永遠不應使用刪除工作人員。