JavaScript解析文件中大量数据的最有效方法是什么?
目前我使用JSON解析来序列化未压缩的250MB文件,这非常慢。是否有一种简单而快速的方法可以从文件中读取JavaScript中的大量数据而无需遍历每个字符?存储在文件中的数据只是几个浮点数组?
更新 该文件包含一个3d网格,6个缓冲区(vert,uv等)。缓冲区也需要表示为类型化数组。流不是一个选项,因为在图形引擎可以继续之前必须完全加载文件。也许更好的问题是如何以最有效的方式将大型类型的数组从文件传输到javascript。
答案 0 :(得分:4)
我建议使用基于SAX的解析器来处理这类JavaScript或流解析器。
DOM解析会将整个内容加载到内存中,这不是您提到的大文件的方法。
您可能会参考 For Javascript based SAX Parsing (in XML)
https://code.google.com/p/jssaxparser/
和
for JSON
您可以自己编写,以下链接演示了如何在Javascript中编写基于SAX的基本解析器
http://ajaxian.com/archives/javascript-sax-based-parser
答案 1 :(得分:1)
没有一种非常好的方法可以做到这一点,因为整个文件将被加载到内存中,我们都知道它们都有很大的内存泄漏。您是否可以不添加一些分页来查看该文件的内容?
检查是否有任何插件允许您将文件作为流读取,这将大大改善这一点。
<强>更新强>
http://www.html5rocks.com/en/tutorials/file/dndfiles/
您可能想要阅读有关读取本地文件的新HTML5 API。您将遇到下载250mb数据的问题。
答案 2 :(得分:1)
您是否尝试将其编码为二进制文件并将其作为blob传输?
https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Sending_and_Receiving_Binary_Data
答案 3 :(得分:1)
我可以想到1个解决方案和1个黑客
解: 以块的形式扩展数据拆分:归结为http协议。关于http对于大多数客户端 - 服务器场景具有足够“语言”这一概念的REST部分。
您可以在客户端上设置请求标头Content-len,以确定每个请求需要多少数据
然后在后端有一些选项http://httpstatus.es
HACK: 使用Websocket并获取二进制文件。然后使用html5 FileAPI将其加载到内存中。 这可能会失败,因为它不是导致问题的下载,而是解析几乎无穷无尽的JS对象
答案 4 :(得分:0)
你在浏览器上运气不好。你不仅需要下载文件,而且无论如何你都必须解析json。在服务器上解析它,将其分解为更小的块,将数据存储到数据库中,并查询所需内容。