HTML 5 Công nhân web rất chậm khi sử dụng worker.postMessage trên một đối tượng JSON lớn. Tôi đang cố gắng tìm hiểu cách chuyển đối tượng JSON sang một nhân viên web - sử dụng các loại 'Đối tượng có thể chuyển' trong Chrome, để tăng tốc độ này.Công nhân Web - Đối tượng có thể chuyển giao cho JSON
Dưới đây là những gì tôi đang đề cập đến và dường như nó nên tốc độ này lên khá một chút: http://updates.html5rocks.com/2011/12/Transferable-Objects-Lightning-Fast
Tôi đang gặp khó khăn khi tìm một ví dụ tốt về điều này (và tôi không tin rằng tôi muốn sử dụng một ArrayBuffer). Bất kỳ trợ giúp sẽ được đánh giá cao.
Tôi đang tưởng tượng một cái gì đó như thế này:
worker = new Worker('workers.js');
var large_json = {};
for(var i = 0; i < 20000; ++i){
large_json[i] = i;
large_json["test" + i] = "string";
};
//How to make this call to use Transfer Objects? Takes approx 2 seconds to serialize this for me currently.
worker.webkitPostMessage(large_json);
Đây là nơi mà người lao động, trong vỏ bọc hiện tại của họ, rơi xuống, trong đó họ không có kết nối với kịch bản gốc, do đó bất cứ điều gì bạn muốn vượt qua cho họ liên quan đến một hoạt động sao chép mệt mỏi. Phương pháp "vượt qua bằng cách tham chiếu" của Webkit chắc chắn là cách để đi. Ngoài ra, hai điểm tấn công tôi: nếu bạn bị chậm trễ 2 giây, điều đó có thể đánh bại bất kỳ khoản tiết kiệm nào bạn có thể đạt được bằng cách sử dụng nhân viên web, vì vậy bạn cũng có thể tránh chúng và tuần tự hóa. 2) Làm thế nào về web SQL cho dữ liệu kích thước này - bất kỳ nhanh hơn? – Utkanos
Tôi về cơ bản cần phải thao tác JSON và chuyển nó trở lại, vì vậy tôi không tin rằng web SQL sẽ hoạt động. Trong trường hợp bình thường của tôi, tôi sẽ không chuyển giao một đối tượng JSON lớn, nhưng tôi đã sử dụng nó cho mục đích thử nghiệm/trình diễn. Tôi * tin * từ những gì tôi đã đọc rằng các đối tượng chuyển nhượng sẽ làm cho nó một hoạt động vượt qua tham chiếu rất nhanh, dẫn đến một chuyển giao cực kỳ kịp thời, đến nay dưới 2 giây hiện tại. Tuy nhiên, tôi không thể tìm thấy bất kỳ ví dụ nào về cách thực sự làm điều đó. – kclem06
"các loại phức tạp như Tệp, Blob, ArrayBuffer và các đối tượng JSON." - Xuất hiện nó phải được hỗ trợ: https://developer.mozilla.org/en/Using_web_workers – kclem06