2013-02-23 43 views
9

Có cách nào để tiêu diệt HTML5 WebWorkers trong JavaScript không?Phá hủy WebWorkers

Đây là tình huống của tôi: Tôi có một ứng dụng web tạo ra số lượng WebWorkers phong phú (bất cứ nơi nào từ 16 đến 32) để tối ưu hóa một số quy trình hiển thị. Quá trình này hoạt động tốt trong vài lần đầu tiên, nhưng trang sẽ chết khi tập lệnh được chạy nhiều lần (không tải lại trang). Đó là lỗi tương tự tôi nhận được khi tôi cố gắng đẻ trứng rất nhiều (100+) WebWorkers cùng một lúc, vì vậy tôi giả sử tôi chạy vào cùng một rào cản.

Khi tập lệnh chạy nhiều lần, các WebWorkers đã được khởi tạo trong vòng đầu tiên không còn cần phải tồn tại; Tôi không sử dụng lại bất kỳ đối tượng WebWorker nào. Tôi muốn tiêu diệt các WebWorkers đã được tạo ra lần đầu tiên thông qua việc thực thi các kịch bản trong tương lai không ngừng trong khi cố gắng sinh ra các WebWorkers mới.

Tôi chỉ nhận thấy sự cố này trong Chrome và Firefox; Safari dường như không có giới hạn này.

Trả lời

10

Bạn sẽ có thể gọi đây là từ cửa sổ chính để ngay lập tức chấm dứt một công nhân:

myWorker.terminate(); 

Xem toàn bộ API ở đây: https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers

Ngoài ra, bạn có thể gọi close() từ người lao động tự thấy : https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers

+0

Chính xác những gì tôi đang tìm kiếm. –

+0

nhưng nó chỉ dừng công nhân hoàn thành nhiệm vụ của nó, ví dụ của nhân viên vẫn còn trong bộ nhớ .. – vsync

+1

@vsync Tôi cũng đang làm việc với các cá thể WebWorker. Trong trường hợp của tôi, tôi cần 4 nhân viên web làm việc trên 4 khu vực DOM riêng biệt cần được cập nhật mỗi giây dựa trên một số thông tin mà tôi chuyển cho mỗi nhân viên web được xử lý và gửi lại cho trình duyệt. Trong trường hợp sử dụng này, tôi có nên chấm dứt()/close() mỗi WebWorker sau mỗi cuộc gọi hay tôi có thể sử dụng lại cùng một cuộc gọi mà không lo lắng về các vấn đề hiệu suất, rò rỉ bộ nhớ, v.v.? –

Các vấn đề liên quan