2013-07-05 6 views
1

В моем веб-приложении мне постоянно приходится повторно создавать объекты Worker, потому что нет способа передать новый скрипт старым существующим объектам. Через некоторое время некоторые браузеры начинают блокировать создание новых объектов Worker, потому что их пределы Workers для одного окна достигнуты. Я пытался удалить готовые рабочие объекты до создания новых, но, видимо, я делаю это неправильно. Вот простой тест, который терпит неудачу в опере (предел 256 рабочих на окно):Как удалить объект Worker в JavaScript?

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

необходимо прекратить работу, а не удалить объект. При удалении объекта удаляется указатель на работника. По моему опыту, слишком много ОТКРЫТЫХ рабочих - это проблема, которая помешает вашей программе работать, но нет ограничений для работников, которые были закрыты либо self.close(); в рабочем или рабочем.терминате(); в главном скрипте. Вам никогда не придется использовать удаляющего работника, если вы правильно закрываете своих работников.