30

大きなJSONオブジェクトでworker.postMessageを使用すると、HTML5Webワーカーは非常に遅くなります。この速度を上げるために、Chromeで「転送可能なオブジェクト」タイプを使用してJSONオブジェクトをWebワーカーに転送する方法を理解しようとしています。

これが私が言及しているものであり、これをかなりスピードアップするはずです:http: //updates.html5rocks.com/2011/12/Transferable-Objects-Lightning-Fast

私はこれの良い例を見つけるのに苦労しています(そして私はArrayBufferを使いたいとは思わない)。どんな助けでもいただければ幸いです。

私はこのようなものを想像しています:

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);
4

3 に答える 3

0

「転送可能なオブジェクト」を使用していませんが、これで問題が解決する場合があります。

データ表現を最適化することもできます。たとえば、あなたの例では、パック/アンパックに約1350ミリ秒かかりますが(Google Chrome 19)、次のコードは約25倍速く実行されます(50ミリ秒):

console.time('json');
var a = [], test = [];
for(var i = 0; i < 20000; ++i){
   a.push(i);
   test.push("string");
};
var large_json = {
  a: a.join(','),
  test: test.join(',')
};
large_json = JSON.parse(JSON.stringify(large_json));
large_json.a = large_json.a.split(",");
large_json.test = large_json.test.split(",");
console.timeEnd('json');
于 2012-08-01T07:10:10.543 に答える