Các trường hợp sử dụng cho công nhân web là gì? [đóng cửa]


174

Tôi đang tìm kiếm bối cảnh trong thế giới thực để sử dụng API Công nhân web .


Họ có được hỗ trợ bởi các nền tảng di động / webkit không?
dmp

Không biết chắc chắn, nhưng sẽ đoán chúng là.
Serge Ilinsky

6
@danp Hỗ trợ trình duyệt: caniuse.com/webworkers
Dheeraj Vepakomma

1
Tôi đã viết lên một trường hợp lần đầu tiên chúng tôi sử dụng một nhân viên web, sau đó xác định rằng chúng tôi sẽ tốt hơn nếu không có nó - Windward.net/bloss/web-workers-abandon/#.Vl3QdXarQ-U
David Thielen

Câu trả lời:


143
  • John Resig (danh tiếng của jQuery) có một loạt các ví dụ thú vị về việc sử dụng các nhân viên web ở đây - trò chơi, đồ họa, tiền điện tử.

  • Một cách sử dụng khác là Web I / O - nói cách khác, bỏ phiếu URL trong nền. Bằng cách đó, bạn không chặn UI chờ kết quả bỏ phiếu.

  • Một cách sử dụng thực tế khác: trong Bespin, họ đang sử dụng Công nhân web để thực hiện tô sáng cú pháp mà bạn không muốn chặn chỉnh sửa mã của mình trong khi bạn đang sử dụng ứng dụng.

  • Từ Mozilla : Một cách nhân viên hữu ích là cho phép mã của bạn thực hiện các phép tính chuyên sâu của bộ xử lý mà không chặn luồng giao diện người dùng.

    Ví dụ thực tế, hãy nghĩ về một ứng dụng có một bảng lớn #s (đây là thế giới thực, BTW - được lấy từ một ứng dụng tôi đã lập trình ~ 2 năm trước). Bạn có thể thay đổi một # trong một bảng thông qua trường đầu vào và một loạt các số khác trong các cột khác nhau được tính lại trong một quy trình khá chuyên sâu.

    Quy trình công việc cũ là: Thay đổi #. Đi lấy cà phê trong khi JavaScript vượt qua các thay đổi đối với các số khác và trang web không phản hồi trong 3 phút - sau khi tôi tối ưu hóa nó thành địa ngục và quay lại. Quay lại với cà phê. Thay đổi # thứ hai. Lặp lại nhiều lần. Nhấp vào nút TIẾT KIỆM.

    Quy trình làm việc mới với các công nhân có thể là: Thay đổi #. Nhận thông báo trạng thái rằng một cái gì đó đang được tính toán lại nhưng bạn có thể thay đổi các # khác. Thay đổi thêm #s. Khi hoàn tất thay đổi, hãy đợi cho đến khi trạng thái thay đổi thành "tất cả các tính toán hoàn tất, bây giờ bạn có thể xem lại #s cuối cùng và lưu".


5
Liên kết tuyệt vời! Tôi chưa bao giờ nghe nói về Công nhân ... mmm, Công nhân. (Thời gian để đi tắm lâu, nóng ...)
Peter Rowell

51
Tôi biết đây là câu trả lời hai năm tuổi, nhưng tôi chỉ muốn đề cập rằng bạn không cần Công nhân web cho mục số 2 (URL bỏ phiếu). XHR xảy ra không đồng bộ và không chặn; không cần phải chạy các yêu cầu XHR trên một luồng riêng biệt. (Tất nhiên, trong một ứng dụng hiện đại, bạn muốn sử dụng WebSockets thay vì bỏ phiếu.)
josh3736

6
@ josh3736 - Bạn đã đúng nhưng bây giờ tôi tò mò liệu việc thực hiện nhiều yêu cầu đồng bộ XHR song song có thể khiến trình duyệt không hài lòng? Ngoài ra, bạn cần tài nguyên địa phương để xử lý các phản hồi XHR nơi công nhân có thể hữu ích.
DVK

Nếu tất cả các yêu cầu song song là đến cùng một máy chủ, bạn sẽ đạt giới hạn cho mỗi tên máy chủ ở đâu đó giữa 2 và 9 kết nối đồng thời. (Tôi giả định rằng giới hạn áp dụng trên tất cả các kết nối, cho dù bắt đầu từ các chủ đề chính hoặc một công nhân.) Dĩ nhiên, nếu bạn có 10 yêu cầu đồng thời chạy cùng một lúc, bạn có thể cần phải suy nghĩ lại thiết kế ứng dụng của bạn.
josh3736

2
Xin hỏi câu hỏi đơn giản của tôi, nhưng bạn gọi "#" trong ví dụ của bạn ở trên là gì?
shrewdbeans

35

Tôi đã sử dụng chúng để gửi lượng dữ liệu lớn hơn từ trình duyệt đến máy chủ. Rõ ràng, bạn có thể thực hiện việc này với các cuộc gọi AJAX thông thường, nhưng nếu điều này chiếm một trong các kết nối quý giá trên mỗi tên máy chủ. Ngoài ra, nếu người dùng thực hiện chuyển đổi trang trong quá trình này (ví dụ: nhấp vào liên kết), các đối tượng JavaScript của bạn từ trang trước sẽ biến mất và bạn không thể xử lý các cuộc gọi lại. Khi một nhân viên web được sử dụng, hoạt động này xảy ra ngoài băng tần, vì vậy bạn có một đảm bảo tốt hơn rằng nó sẽ hoàn thành.


2
Nhưng bạn phải trao đổi tin nhắn với nhân viên web. Khi chi phí của hoạt động này xứng đáng được hưởng lợi?
Danielo515

6

Trường hợp sử dụng khác:

Nén / khử các tệp trong nền, nếu bạn có nhiều hình ảnh và các tệp phương tiện khác được trao đổi từ máy chủ ở định dạng nén.


39
Điều này không nên xảy ra trong JavaScript. Hình ảnh đã được nén (PNG, JPEG) bằng các thuật toán được thiết kế để nén dữ liệu hình ảnh hiệu quả. Ném một lớp nén khác lên trên thực sự có thể làm tăng kích thước của dữ liệu. Đối với các loại dữ liệu khác (ví dụ: tệp JSON lớn), trình duyệt phải được xử lý bằng cách sử dụng gzipping HTTP tiêu chuẩn. Nếu bạn đang nén JavaScript, có lẽ bạn đã làm sai .
josh3736

11
Tôi thấy một số người dùng không đủ điều kiện sử dụng, nhưng đây là những gì tôi muốn nói. hãy xem xét một ứng dụng như MS word, như một trình soạn thảo tài liệu mạnh mẽ thông qua đó bạn có thể nhúng hình ảnh, tệp nhạc, dữ liệu, bảng excel, v.v ... tất cả trong MỘT tệp. và xem xét rằng bạn có ứng dụng khách dựa trên web và ứng dụng khách máy tính để bàn và ứng dụng khách iOS / Android. Đối với loại trường hợp sử dụng này, bạn có thể lưu trữ tất cả nội dung tệp trong tệp zip và sau đó giải nén tại mỗi máy khách.
sbr

3
Bookmarklet Instapaper nén trang đang được lưu trước khi gửi đến máy chủ. Nó tiết kiệm thời gian và băng thông.
stevendaniels

12
@ josh3736 Điều duy nhất một trình duyệt có thể làm là gunzip một tệp từ máy chủ web (hoặc bộ đệm của trình duyệt). Nó không thể giải nén dữ liệu từ bộ nhớ cục bộ, cũng như từ websocket và hoàn toàn không thể nén. Các ứng dụng web đang gửi một lượng dữ liệu ngược dòng ngày càng tăng và nén cho việc này cực kỳ hữu ích. Có giá trị tương đương một năm trước khi điều này được đăng: Nếu bạn không thể nghĩ ra bất kỳ trường hợp sử dụng hợp lệ nào để nén JavaScript, có lẽ bạn thiếu trí tưởng tượng.
Adria

1
@Adria: Tiêu chuẩn websocket đang trong quá trình thêm hỗ trợ nén . Nếu bạn đang xử lý hình ảnh được tạo trong trình duyệt ( <canvas>), bạn có thể lấy dữ liệu hình ảnh ở định dạng nén (ví dụ: png). Quan điểm của tôi không phải là không bao giờ thích hợp để nén trong JS; Quan điểm của tôi là trong hầu hết các trường hợp , nó không phải , và trong hầu hết các trường hợp - đặc biệt là xử lý hình ảnh, đó là điều mà câu trả lời này nói về - có một cách khác tốt hơn để tự nén.
josh3736
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.