kcl*_*m06 30 javascript html5 json web-worker
在大型JSON对象上使用worker.postMessage时,HTML 5 Web worker非常慢.我正在尝试弄清楚如何将JSON对象传输给Web工作者 - 使用Chrome中的'Transferable Objects'类型,以提高速度.
这就是我所指的并且似乎应该加快这一点: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);
Run Code Online (Sandbox Code Playgroud)
虽然没有使用“可传输对象”,但这可能会解决您的问题。
您也可以尝试优化您的数据表示。例如,您的示例为我打包/解包需要约 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');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8544 次 |
| 最近记录: |