如何处理LARGE JSON文件的加载

时间:2012-08-24 23:33:09

标签: json large-files

我一直在研究一个WebGL应用程序,它需要大量的点数据才能绘制到屏幕上。目前,该点和表面数据存储在我正在使用的Web服务器上,浏览器在页面加载时正在下载所有120MB的JSON。这在我的网络上花了一分多钟,这不是最佳选择。我想知道是否有人有任何关于加载这么大的数据的经验/提示。我已尽量消除尽可能多的空白,但这几乎没有减少文件大小。

是否有任何方法可以极大地压缩此文件,或者以其他方式更好地下载如此大量的数据?任何帮助都会很棒!

4 个答案:

答案 0 :(得分:1)

JSON非常冗余,所以它压缩得很好,然后在客户端上解压缩。

JavaScript implementation of Gzip

或者,您可以将数据块化为1 MB块,一次一个地发送。 此外,用户可能无法一次与120 MB的数据进行交互,因此可能会实现某种级别的详细系统?

答案 1 :(得分:1)

您可能会考虑的一些事项:

  1. 您的服务器是否在发送前压缩文件?

  2. 此数据经常更改吗?如果没有,您可以将expires标头设置为很长时间,因此浏览器可以将其保留在缓存中。它对第一页访问没有帮助,但在后续访问时,不必再次加载文件。

  3. 你的json文件中有很多重复的东西吗?例如,如果您的对象键很长,您可以用较短的对象键替换它们,在浏览器中再次发送和替换。如果压缩文件(参见第1项),好处不会那么好,但根据你的文件,它可能会有所帮助。

  4. 浏览器是否一次消耗所有这些数据?如果不是,您可以尝试将其分解成更小的部分,并在其他部分加载时开始处理第一部分。

  5. 但最重要的是:你确定JSON是这项工作的合适工具吗?通用压缩工具只能到目前为止,但如果您探索数据的特定特征,您可能会获得更好的结果。如果您提供有关您正在使用的格式的更多详细信息,我们可以为您提供更多帮助。

答案 2 :(得分:1)

如果您控制发送数据的Web服务器,您可以尝试启用json数据的压缩。

这是通过在applicationhost.config(IIS 7)中添加以下内容来完成的:

<system.webServer>
    <urlCompression doDynamicCompression="true" />
    <httpCompression>
      <dynamicTypes>
        <add mimeType="application/json" enabled="true" />
        <add mimeType="application/json; charset=utf-8" enabled="true" />        
      </dynamicTypes>
    </httpCompression>
</system.webServer>

然后,您需要重新启动应用的应用池。

Source

答案 3 :(得分:0)

我遇到了类似你的问题,所以我决定使用二进制数而不是字符串,所以当用户向我的服务器创建请求时,我会用数字回答。

对于前&#39;假设用户是餐馆里的一张桌子,所以不要发送像汉堡,橙汁,水等字符串......&#39;我可以发送数字15并转换成二进制8,4,2,1。

当用户要求多个东西时,让我们说4个汉堡很难遵循,所以你可以用二进制文件添加两个数字的数组。 我发现它非常有用且更安全。

如果您决定这样做,我建议开发人员使用。将translate转换为二进制时,mode使用字符串。