2013-07-30 30 views
6

Tôi đang viết một ứng dụng sử dụng JavaScript, HTML5 và AngularJS. Nó chỉ phải làm việc trên các trình duyệt khá gần đây (ví dụ, IE10 nhưng không phải IE9).Làm cách nào để thực hiện các tác vụ tính toán chuyên sâu trong ứng dụng AngularJS?

Tại một số địa điểm trong ứng dụng, sẽ có các tác vụ tính toán chuyên sâu, chẳng hạn như phân tích cú pháp XML, giải mã base64; chúng có thể liên quan đến dữ liệu khá lớn (một vài MB chắc chắn là một khả năng).

Nếu tôi chỉ gọi những thứ như atob() hoặc DOMParser.parseFromString(), tôi sẽ nhận được một trình duyệt không phản hồi trong vài giây hoặc thậm chí vài phút. Điều này rõ ràng là không thể chấp nhận được đối với người dùng.

Tôi đã sử dụng Dịch vụ Q của Angular để làm những việc như truy cập dịch vụ Web bên ngoài không đồng bộ và do đó tránh treo trình duyệt trong khi chờ phản hồi. Nhưng các hoạt động như vậy đã có API không đồng bộ.

Điều gì về các nhiệm vụ có chủ đích tính toán này, không có API không đồng bộ của riêng mình?

Tôi có thể tách một số tác vụ này một chút, hứa hẹn chuỗi. Điều này có giúp ích gì không? Hàng đợi thông báo của trình duyệt có quay ở cuối mỗi tác vụ không?

Tôi thấy sự tồn tại của "Công nhân Web", có vẻ như cung cấp đa luồng phù hợp. Nhưng chúng dường như có khả năng khá kém để chuyển các đối tượng đến/từ các luồng công nhân. Chắc chắn, có vẻ như cách đó cho một người như tôi đến từ C# .Net! Ví dụ, tôi muốn tiêm các dịch vụ Angular (được xây dựng trong và của riêng tôi) vào các nhiệm vụ trên các luồng. Và tôi cũng không muốn sao chép dữ liệu lớn giữa các luồng.

Những người khác có đạt được ứng dụng web phía máy khách đáp ứng bao gồm tính toán nghiêm túc không? Nếu vậy, họ đang sử dụng cái gì để đạt được điều này?

+0

Đối với dịch vụ tiêm chích, một chuỗi công nhân có thể sử dụng hàm importScripts toàn cục ('script.js') - chỉ trong trường hợp bạn đã bỏ lỡ nó. Đáng buồn thay, không có giải pháp cho vấn đề sao chép dữ liệu. –

+1

Tôi đã thử nghiệm và tôi không thể có được Angular để tải trong một công nhân (nó cần cửa sổ và tài liệu), vì vậy tôi đoán tôi không thể sử dụng bất cứ điều gì Angular? – PeteAC

Trả lời

3

Có vẻ như bạn đang tìm kiếm Parallel.js library.

Dưới đây là một mô tả nhanh chóng của các thư viện từ trang web của họ:.

"Parallel.js là một thư viện nhỏ cho xử lý đa lõi trong Javascript Nó được tạo ra để tận dụng tối đa các không ngừng trưởng thành web- API công nhân. "

Tôi hiện không biết bất kỳ ví dụ cụ thể nào về việc sử dụng Parallel.js trong Angular, nhưng tôi chắc chắn sẽ không quá khó để tích hợp thư viện dưới dạng dịch vụ Góc.

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