2010-05-05 26 views

Trả lời

114
  • John Resig (jQuery nổi tiếng) có a bunch of interesting examples of using web workers here - trò chơi, đồ họa, crypto.

  • 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 giao diện người dùng chờ kết quả bỏ phiếu.

  • Một sử dụng thực tế: trong Bespin, họ đang sử dụng Web Workers để làm nổi bật cú pháp, mà bạn sẽ không muốn chặn chỉnh sửa mã của bạn trong khi bạn đang sử dụng ứng dụng.

  • Từ Mozilla: Nhân viên một cách 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 cho bộ xử lý mà không chặn luồng giao diện người dùng. Là một ví dụ thực tế, hãy nghĩ đến một ứng dụng có một bảng số # lớn (đây là thế giới thực, BTW - được lấy từ một ứng dụng mà tôi đã lập trình ~ 2 năm trước). Bạn có thể thay đổi một số trong bảng thông qua trường nhập 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 quá trình khá chuyên sâu.

    Quy trình làm việc cũ là: Thay đổi #. Nhận được cà phê trong khi JavaScript crunches thông qua những thay đổi cho các số khác và trang web là không phản hồi trong 3 phút - sau khi tôi tối ưu hóa nó vào địa ngục và trở lại. Quay lại với cà phê. Thay đổi số thứ hai. Lặp lại nhiều lần. Nhấp vào nút LƯU.

    Quy trình làm việc mới với công nhân có thể là: Thay đổi #. Nhận thông báo trạng thái cho biết có điều gì đó đang được tính toán lại nhưng bạn có thể thay đổi các số khác. Thay đổi nhiều hơn #s. Khi thay đổi xong, đợi cho đến khi trạng thái thay đổi thành "tất cả các phép tính đã hoàn tất, bây giờ bạn có thể xem lại các 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 nước nóng, dài ...) –

+39

Tôi biết đây là câu trả lời hai tuổi, nhưng tôi chỉ muốn đề cập rằng bạn không nên cần công nhân web cho mụC# 2 (URL bỏ phiếu). XHR xảy ra không đồng bộ và không chặn; không cần 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

+4

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

29

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ể làm điều 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 một 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 ban nhạc, vì vậy bạn có một đảm bảo tốt hơn rằng nó sẽ hoàn thành.

5

Một Use case:

nén/De-nén file ở chế độ nền, nếu bạn có rất nhiều hình ảnh và các tập tin media khác được trao đổi từ các máy chủ ở định dạng nén.

+30

Điều này không nên xảy ra trong JavaScript. Hình ảnh được * đã nén (PNG, JPEG) sử dụng các thuật toán được thiết kế để nén dữ liệu hình ảnh hiệu quả. Việc ném một lớp nén khác lên trên thực tế có thể 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ụ: một tệp JSON lớn), trình duyệt phải xử lý nén bằng cách sử dụng gzipping HTTP chuẩn. ** Nếu bạn đang thực hiện nén trong JavaScript, có thể bạn đang * làm sai *. ** – josh3736

+10

Tôi thấy một số người dùng loại bỏ trường hợp sử dụng, nhưng đây là những gì tôi muốn nói. xem xét một ứng dụng như MS word, giống 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, file nhạc, dữ liệu, excel tờ vv tất cả trong một tập tin. 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 trên 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 một tệp zip và sau đó giải nén tại mỗi máy khách. – sbr

+0

Tôi hy vọng nhận xét trên có ý nghĩa. Vui lòng đưa ra đề xuất của bạn nếu bạn có thể nghĩ ra những cách thông minh hơn để đạt được điều này. – sbr

Các vấn đề liên quan