9

JavaScript 中从文件中解析大量数据的最有效方法是什么?

目前我使用 JSON 解析来序列化一个未压缩的 250MB 文件,这真的很慢。有没有一种简单快速的方法可以从文件中读取大量 JavaScript 数据,而无需遍历每个字符?文件中存储的数据只是几个浮点数组?

更新: 该文件包含一个 3d 网格、6 个缓冲区(vert、uv 等)。此外,缓冲区需要呈现为类型化数组。流式传输不是一种选择,因为必须先完全加载文件,然后图形引擎才能继续。也许一个更好的问题是如何以最有效的方式将巨大的类型化数组从文件传输到 javascript。

4

5 回答 5

4

我会为这类 JavaScript 或流解析器推荐基于 SAX 的解析器。

DOM 解析会将整个内容加载到内存中,这不是您提到的大文件的方式。

For Javascript based SAX Parsing (in XML)你可以参考 https://code.google.com/p/jssaxparser/

for JSON您可以自己编写,以下链接演示了如何在 Javascript http://ajaxian.com/archives/javascript-sax-based-parser中编写基于 SAX 的基本解析器

于 2013-04-02T11:39:07.813 回答
1

没有一个很好的方法可以做到这一点,因为整个文件将被加载到内存中,我们都知道它们都有很大的内存泄漏。您不能添加一些分页来查看该文件的内容吗?

检查是否有任何插件允许您将文件作为流读取,这将大大改善这一点。

更新

http://www.html5rocks.com/en/tutorials/file/dndfiles/

您可能想了解新的 HTML5 API 以读取本地文件。您仍然会遇到下载 250mb 数据的问题。

于 2013-04-02T11:33:33.877 回答
1

我能想到 1 个解决方案和 1 个 hack

解决方案:将数据拆分成块扩展:归结为 http 协议。REST 部分认为 http 有足够的“语言”用于大多数客户端-服务器场景。

您可以在客户端上设置请求标头 Content-len 来确定每个请求需要多少数据

然后在后端有一些选项http://httpstatus.es

  • 如果服务器根本无法从数据库中获取那么多数据,请回复 413
  • 417 如果服务器能够回复但不在请求的标头下(Content-len)
  • 206 与提供的块,让客户知道“还有更多来自哪里”

HACK:使用 Websocket 并获取二进制文件。然后使用 html5 FileAPI 将其加载到内存中。这很可能会失败,因为它不是导致问题的下载,而是解析一个几乎无穷无尽的 JS 对象

于 2015-06-03T23:02:25.503 回答
0

你在浏览器上不走运。您不仅必须下载文件,而且无论如何都必须解析 json。在服务器上解析它,将其分成更小的块,将数据存储到数据库中,然后查询您需要的内容。

于 2013-04-02T11:35:51.037 回答