Nhân viên dịch vụ có thể làm gì mà nhân viên web không thể?


109

Nhân viên dịch vụ có thể làm gì mà nhân viên web không thể? Hoặc ngược lại?

Có vẻ như web worker là một tập hợp con các chức năng của service worker. Điều này có chính xác?

Câu trả lời:


140

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.)

Nguồn - Sử dụng nhân viên web

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.

Nguồn - API công nhân dịch vụ

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).


1
Nhân viên dịch vụ có thể làm gì mà nhân viên web không thể?
Pacerier

1
@Pacerier đọc đoạn trích dẫn thứ hai và đoạn cuối cùng để trả lời câu hỏi của bạn
Buksy

Tôi đồng ý với Pacerier rằng điều này không trả lời câu hỏi. Tôi chỉ nói những gì một người làm và những gì khác. Một người đọc có thể đưa ra kết luận dựa trên nó, nhưng một câu trả lời tốt phải làm rõ, thậm chí có thể xác nhận hoặc bác bỏ kết luận của người đọc.
Regiia

Tôi thích câu trả lời khác mà Ali đã cung cấp, mô tả rộng hơn về sự khác biệt giữa hai công nghệ đó. Nhưng tôi nghĩ rằng đoạn cuối cùng của câu trả lời của tôi trả lời rõ ràng câu hỏi, Nhân viên web có thể giúp bạn xây dựng ứng dụng ngoại tuyến . Nếu bạn nghĩ có câu trả lời nào hay hơn, vui lòng thêm câu trả lời khác :)
Buksy

1
@Buksy, Một lỗi đánh máy trong nhận xét của bạn: [[Dịch vụ]] Nhân viên có thể giúp bạn xây dựng ứng dụng ngoại tuyến
Ahmad Mobaraki

143

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:

Sử dụng nhân viê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!


3
Bảng đó giải thích nó rất tốt. Các câu hỏi ban đầu có lẽ sẽ được phrased tốt hơn là "sự khác biệt giữa là gì ..."
Drenai

1
Nhân viên dịch vụ có thể làm gì mà nhân viên web chia sẻ không thể?
Pacerier
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.