我一直在开发一个 WebGL 应用程序,它需要大量的点数据才能绘制到屏幕上。目前,该点和表面数据存储在我正在使用的网络服务器上,并且浏览器在页面加载时正在下载所有 120MB 的 JSON。这在我的网络上需要一分钟多的时间,这不是最佳的。我想知道是否有人对加载这么大的数据有任何经验/提示。我已经尝试尽可能多地消除空格,但这几乎不会影响文件大小。
有什么方法可以极大地压缩这个文件,或者有更好的方法来下载如此大量的数据?任何帮助都会很棒!
我一直在开发一个 WebGL 应用程序,它需要大量的点数据才能绘制到屏幕上。目前,该点和表面数据存储在我正在使用的网络服务器上,并且浏览器在页面加载时正在下载所有 120MB 的 JSON。这在我的网络上需要一分钟多的时间,这不是最佳的。我想知道是否有人对加载这么大的数据有任何经验/提示。我已经尝试尽可能多地消除空格,但这几乎不会影响文件大小。
有什么方法可以极大地压缩这个文件,或者有更好的方法来下载如此大量的数据?任何帮助都会很棒!
如果您控制发送数据的 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>
然后,您需要为您的应用重新启动应用程序池。
JSON 非常冗余,因此它可以很好地压缩,然后在客户端解压缩。
或者,您可以将数据分成 1 MB 的块,一次发送一个以上。此外,用户可能无法一次与 120 MB 的数据进行交互,所以也许可以实现某种详细程度的系统?
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.
您可能会考虑以下几点:
您的服务器是否在发送前压缩文件?
这些数据是否经常变化?如果没有,您可以将 expires 标头设置为很长的时间,以便浏览器可以将其保存在缓存中。它对第一个页面访问没有帮助,但在随后的页面访问中,文件不必再次加载。
你的 json 文件中有很多重复的东西吗?例如,如果您的对象键很长,您可以用较短的键替换它们,发送,然后在浏览器中再次替换。如果文件被压缩(参见第 1 项),好处不会那么大,但根据您的文件,它可能会有所帮助。
浏览器会一次性消耗所有这些数据吗?如果不是,您可以尝试将其分解为更小的部分,并在其他部分加载时开始处理第一部分。
但最重要的是:您确定 JSON 是适合这项工作的工具吗?通用压缩工具只能做到这一点,但如果您探索数据的特定特征,您可能能够获得更好的结果。如果您提供有关您使用的格式的更多详细信息,我们可能会为您提供更多帮助。