Cả hai đều là script chạy trên thread riêng, tách khỏi main thread và không truy cập được DOM — nhưng vai trò khác hẳn:
- Web Worker: thread tính toán cho một trang. Dùng để đẩy việc nặng CPU (parse file lớn, xử lý ảnh, tính toán dữ liệu) ra khỏi main thread → UI không bị đơ. Giao tiếp bằng
postMessage; vòng đời gắn với trang — trang đóng thì worker chết. - Service Worker: đóng vai proxy giữa app và network, đăng ký theo scope/origin và phục vụ chung mọi tab. Chặn sự kiện
fetchđể trả response từ Cache Storage → offline support (nền tảng của PWA), cùng push notification và background sync. Event-driven: trình duyệt đánh thức khi có sự kiện rồi tắt đi, không sống thường trực; chỉ chạy trên HTTPS.
Chọn nhanh: cần tính toán song song → Web Worker; cần offline/cache/push → Service Worker. Chúng không thay thế nhau và có thể dùng đồng thời.