Câu trả lời:
Có sự khác biệt lớn về mục đích của chúng:
Nhân viên web
Web worker cung cấp một phương tiện đơn giản để nội dung web chạy các tập lệnh trong các chuỗi nền. Luồng công nhân có thể thực hiện các tác vụ mà không can thiệp vào giao diện người dùng. Ngoài ra, họ có thể thực hiện I / O bằng cách sử dụng XMLHttpRequest (mặc dù các thuộc tính kênh và responseXML luôn rỗng). Sau khi được tạo, một worker có thể gửi thông báo tới mã JavaScript đã tạo ra nó bằng cách đăng thông báo lên một trình xử lý sự kiện được chỉ định bởi mã đó (và ngược lại.)
Nhân viên phục vụ
Service worker về cơ bản hoạt động như máy chủ proxy đặt giữa các ứng dụng web, trình duyệt và mạng (khi có sẵn). Chúng nhằm mục đích (trong số những thứ khác) cho phép tạo ra trải nghiệm ngoại tuyến hiệu quả, chặn các yêu cầu mạng và thực hiện hành động thích hợp dựa trên việc mạng có sẵn và nội dung cập nhật nằm trên máy chủ hay không. Chúng cũng sẽ cho phép truy cập vào thông báo đẩy và API đồng bộ hóa nền.
Vì vậy, Web worker rất tiện lợi để chạy các tập lệnh đắt tiền mà không khiến giao diện người dùng bị đóng băng, trong khi Service worker hữu ích để sửa đổi phản hồi từ các yêu cầu mạng (ví dụ: khi xây dựng một ứng dụng ngoại tuyến).
Câu trả lời của Buksy là đúng nhưng theo tôi thì nó không trả lời được câu hỏi ban đầu, cụ thể là: "Nhân viên dịch vụ có thể làm gì mà nhân viên web không thể làm được? Hoặc ngược lại?"
Có những khác biệt cơ bản trong vòng đời của chúng và số lượng phiên bản trên mỗi nguồn gốc mà bạn có thể có. Nói ngắn gọn:
| Web Workers | Service Workers |
|--------------|--------------|------------------|
| Instances | Many per tab | One for all tabs |
| Lifespan | Same as tab | Independent |
| Intended use | Parallelism | Offline support |
Câu trả lời của Buksy về cơ bản là hàng cuối cùng của bảng. Tín dụng: Tôi lấy bảng này từ Nhân viên Dịch vụ và Nhân viên Dịch vụ Làm sáng tỏ Web của Nolan Lawson, bắt đầu từ trang trình bày 35 .
Cụ thể, đây là cách bạn sinh ra và chấm dứt công nhân web:
trong khi nhân viên dịch vụ có vòng đời riêng của họ, phải thừa nhận là "phần phức tạp nhất" của họ:
Vòng đời của nhân viên dịch vụ
Vì vậy, phong cách sống là một trong những khác biệt cơ bản giữa hai (một hệ quả của mục đích sử dụng của chúng).
Đã từng có sự khác biệt rất lớn trong việc hỗ trợ trình duyệt : Service worker hoàn toàn không khả dụng trong Safari dành cho iOS cho đến ngày 11.3 (29/03/2018), hãy xem Tôi có thể sử dụng service worker không? Ngược lại, web worker đã được hỗ trợ trình duyệt tốt hơn nhiều vào năm 2012: Tôi có thể sử dụng web worker không?
Nếu bạn phải hỗ trợ IE11, bạn chỉ có thể sử dụng nhân viên web: IE11 không có nhân viên dịch vụ và dường như ngày kết thúc hỗ trợ cho IE11 là ngày 14 tháng 10 năm 2025 .
Có sự khác biệt nhỏ trong hỗ trợ API của họ trên các trình duyệt, hãy xem Kiểm tra công nhân HTML5 (cũng bởi Nolan Lawson). Trong một trình duyệt cụ thể, một loại nhân viên có thể hỗ trợ một lệnh gọi API nhất định trong khi loại kia thì không. Truy cập trang đó và kiểm tra trình duyệt của riêng bạn!