5

我一直在开发一个 WebGL 应用程序,它需要大量的点数据才能绘制到屏幕上。目前,该点和表面数据存储在我正在使用的网络服务器上,并且浏览器在页面加载时正在下载所有 120MB 的 JSON。这在我的网络上需要一分钟多的时间,这不是最佳的。我想知道是否有人对加载这么大的数据有任何经验/提示。我已经尝试尽可能多地消除空格,但这几乎不会影响文件大小。

有什么方法可以极大地压缩这个文件,或者有更好的方法来下载如此大量的数据?任何帮助都会很棒!

4

4 回答 4

2

如果您控制发送数据的 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>

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

资源

于 2012-08-24T23:48:44.823 回答
2

JSON 非常冗余,因此它可以很好地压缩,然后在客户端解压缩。

Gzip 的 JavaScript 实现

或者,您可以将数据分成 1 MB 的块,一次发送一个以上。此外,用户可能无法一次与 120 MB 的数据进行交互,所以也许可以实现某种详细程度的系统?

于 2012-08-24T23:43:00.577 回答
1

I had an issue sort of like the one you had, so I've decide to use binary numbers instead of strings so when the user create request to my server I answer with a numbers.

For ex' lets say the user is a table in a restaurant so instead of sending a string like 'burger,orange juice, water,etc...' I can send the number 15 and translate into binary 8,4,2,1.

when the user ask for multiple thing, lets say 4 burgers it will be hard to follow so you can add two numbers of an array with the binary. I found it very useful and more secure.

If you decide doing it, I suggest on dev' mode use string when you deploy translate into binary.

于 2013-03-09T00:10:39.490 回答
1

您可能会考虑以下几点:

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

  2. 这些数据是否经常变化?如果没有,您可以将 expires 标头设置为很长的时间,以便浏览器可以将其保存在缓存中。它对第一个页面访问没有帮助,但在随后的页面访问中,文件不必再次加载。

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

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

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

于 2012-08-24T23:44:33.733 回答