2013-02-23 3 views
9

Есть ли способ уничтожить HTML5 WebWorkers в JavaScript?Destroying WebWorkers

Вот моя ситуация. У меня есть веб-приложение, которое генерирует приличное количество WebWorkers (где-то между 16 и 32) для оптимизации некоторых процессов рендеринга. Этот процесс отлично работает в первый раз, но страница умирает, когда скрипт запускается несколько раз (без перезагрузки страницы). Это та же ошибка, которую я получаю, когда пытаюсь создать много (100+) WebWorkers сразу, поэтому я предполагаю, что столкнулся с тем же барьером.

Когда сценарий запускается более одного раза, WebWorkers, которые были созданы в первом раунде, больше не должны существовать; Я не повторно использую объекты WebWorker. Я хотел бы уничтожить WebWorkers, которые были созданы в первый раз, так что будущие исполнения сценария не останавливаются при попытке создать новые WebWorkers.

Я заметил эту проблему только в Chrome и Firefox; У Safari, похоже, нет этого ограничения.

ответ

10

Вы должны быть в состоянии назвать это из главного окна, чтобы немедленно прекратить работник:

myWorker.terminate(); 

Посмотреть полный API здесь: https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers

В качестве альтернативы, вы можете позвонить close() от работника самих см : https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers

+0

Именно то, что я искал. –

+0

, но он только останавливает работника от выполнения его задачи, экземпляр рабочего все еще находится в памяти. – vsync

+1

@vsync Я также работаю с экземплярами WebWorker. В моем случае мне нужно 4 веб-рабочих для работы в 4 различных областях DOM, которые необходимо обновлять каждую секунду на основе некоторой информации, которую я передаю каждому веб-рабочему, который обрабатывается и отправляется обратно в браузер. В этом случае я должен закончить()/закрыть() каждый WebWorker после каждого вызова, или я могу повторно использовать один и тот же, не беспокоясь о проблемах с производительностью, утечки памяти и т. Д.? –

Смежные вопросы