在Javascript中解析大型JSON数组
Parsing a large JSON array in Javascript
我应该用Javascipt解析一个非常大的JSON数组。它看起来像:
mydata = [
{'a':5, 'b':7, ... },
{'a':2, 'b':3, ... },
.
.
.
]
现在的问题是,如果我将整个对象传递给我的解析函数parseJSON()
,那么它当然可以工作,但它会阻塞选项卡的进程30-40秒(对于包含160000个对象的数组)。
在从服务器请求并解析JSON的整个过程中,我会向用户显示一个"加载"gif。当然,在我调用parse函数后,gif也会冻结,从而导致糟糕的用户体验。我想这次没有办法了,有没有办法(至少)防止加载的gif冻结?
比如每隔几毫秒就对JSON块调用parseJSON()?虽然我是javascript中的一个noob,但我无法实现这一点。
非常感谢,如果你能在这里帮我,我将不胜感激。
您可能需要检查此链接。这是关于多线程的。
基本上:
var url = 'http://bigcontentprovider.com/hugejsonfile';
var f = '(function() {
send = function(e) {
postMessage(e);
self.close();
};
importScripts("' + url + '?format=json&callback=send");
})();';
var _blob = new Blob([f], { type: 'text/javascript' });
_worker = new Worker(window.URL.createObjectURL(_blob));
_worker.onmessage = function(e) {
//Do what you want with your JSON
}
_worker.postMessage();
老实说,我自己还没试过。。。
关于可移植性的编辑:Sebastien D.发布了一条带有mdn链接的评论。我刚刚在兼容性部分id中添加了一个ref。
我从未遇到过30-40秒的完整页面锁定,我几乎印象深刻!将数据重组为更小的数据或在服务器端将其拆分为许多文件才是真正的答案。你真的需要每一个小字节的数据吗?
或者,如果你不能更改文件@Cyrill_DD,工作线程的答案将能够为你解析数据并将其发送到你的主JS。不过,这并不像你所猜测的那样是一个完美的解决方案。在两个线程之间传递数据需要对信息进行串行化和重新解释,因此当数据在线程之间传递时,您可能会发现速度明显减慢,如果您试图同时传递所有数据,则会再次回到原点。在工作线程中构建一个查询系统,以便在需要时请求数据块,并使用消息回调可以防止主线程上的解析速度减慢,并允许您在不将数据全部加载到主上下文中的情况下完成对数据的访问。
我应该补充一点,工作线程相对较新,主浏览器支持很好,但移动很糟糕。。。只是提醒一下!
- 尝试发布大型JSON数据时出现错误请求错误
- 在 Nodejs 中解析大型 JSON 文件
- 高效灵活的Javascript库,用于查询允许聚合的大型JSON文件
- 解析大型JSON文件时页面冻结
- 从大型JSON中获取要显示的值
- 试图解析一个大型JSON对象并提取数据,但不断出现意外的令牌错误
- 带有大型JSON的简单ngTable在单元格中不显示任何数据
- 使用 ajax,jquery ,java 保存大型 JSON 字符串
- 将大型 JSON 文件与 d3.js 一起使用会导致大量性能下降/崩溃
- 浏览器无法处理大型 JSON
- 将大型 JSON 文件拆分为多个文件
- 更好的加载速度:大型JSON文件,或需要处理的小型CSV文件
- 处理大型JSON文件时的最佳实践
- 搜索大型Json.csv文件,并使用实时搜索风格输出结果
- 无法使用jquery.ajax一致地加载大型json响应
- 如何用javascript上传带有表单数据的大型JSON对象
- 如何最好地显示来自大型json对象的匹配
- 在Javascript中解析大型JSON数组
- 如何使用JQuery将大型JSON字符串转换为数组
- 如何在Chrome扩展中动态加载大型JSON文件