Web Workers cho phép chạy các script chạy lâu (long-running scripts) trên luồng nền (background thread), không bị ngắt quãng bởi các tác vụ giao diện người dùng (click, nhập liệu, v.v.), giúp trang web luôn mượt mà (responsive).
Đặc điểm quan trọng
- Web Workers là script nền, tương đối "nặng" (heavyweight), không nên tạo quá nhiều worker cùng lúc.
- Ví dụ: không nên tạo một worker cho mỗi pixel của ảnh 4 megapixel.
- Worker được khởi tạo bằng URL của một file JavaScript chứa mã sẽ chạy trong worker.
- Worker giao tiếp với trang chính (main thread) qua hệ thống sự kiện (
postMessage,onmessage).
Cú pháp khởi tạo
var worker = new Worker('bigLoop.js');
Luồng hoạt động cơ bản
- Trang chính tạo worker:
new Worker('worker.js'). - Worker lắng nghe
onmessageđể nhận dữ liệu từ trang chính. - Worker xử lý tính toán nặng, sau đó gửi kết quả về qua
postMessage(). - Trang chính nhận kết quả qua
worker.onmessage.
Web Workers không thể truy cập DOM trực tiếp. Chúng chỉ có thể trao đổi dữ liệu tuần tự hóa (serializable data) với luồng chính.