在大型 JSON 对象上使用 worker.postMessage 时,HTML 5 Web worker 非常慢。 我试图弄清楚如何将 JSON 对象传输到网络 worker - 使用 Chrome 中的“可传输对象”类型,以提高速度。
这就是我所指的,看起来它应该会加快速度: 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);
最佳答案
如果您必须从现有的 Json 数组从头开始构建它,那么使用可转移对象将无济于事(这非常接近克隆......)
Json 数据从何而来?保持工作线程上所有繁重工作的一种可能方法是让它使用 XmlHttpRequest 获取数据,对其进行转换并将其发送到 UI 线程。这样,高昂的克隆成本发生在工作线程上,虽然它需要与 UI 线程中相同的时间,但不会阻塞您的应用。
https://stackoverflow.com/questions/11365894/
相关文章:
c# - JSON.NET JObject 键比较不区分大小写
c# - 无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型
ruby-on-rails - 在Rails中将所有 Controller 参数从camelCase
javascript - 将 JSON 数据导入 Google 表格
asp.net - jqgrid 与 asp.net webmethod 和 json 一起使用排序
java - 如何在返回对象的 Spring MVC @RestController @Respon