javascript - 移动设备上性能更好的 JSON 替代方案

标签 javascript json serialization deserialization

我正在构建一个 webgl 应用程序。它需要反序列化大约 15MB 的数据(这是单个对象的大小,我的应用程序中将有大约 10 个),并且该数据的较大部分(90%)是一些 float 数组,这些数组需要在 JavaScript 中反序列化为 Float32Arrays。

目前我正在使用 JSON。由于我的数据包含大量重复数字,因此它具有高度可压缩性,并且我对网络性能感到满意。除了。我也对其在桌面上的性能感到满意。然而,将数据加载、反序列化为普通 JS 数组,然后在移动设备上将其转换为 Float32Arrays 需要花费大量时间。

我考虑过使用 protobuff 但我在 https://protobuffers.codeplex.com/ 上看到了这个

Protocol Buffers are not designed to handle large messages. If you are dealing in messages larger than a megabyte each, it may be time to consider an alternate strategy.

那么我可以做些什么来提高我的应用程序的性能。我应该测试哪些 SERDES 方法?

请引导我完成这个过程并帮助我测试我的替代方案,如果您在评论部分提出任何问题,我会提供更多详细信息。

最佳答案

如果您的对象就像一个大 float 组,您可以发送原始字节而不是 JSON 编码的字符串。

XMLHttpRequest 具有 responseType = "arraybuffer"。这样,您的“解析步骤”就减少为 var floats = new Float32Array(xhr.response)

它甚至会减少这个任务对内存的影响,因为你不需要保留一个 15MB 大字符串 + 一个包含大约 20MB double 的中间数组,我猜 + 包含另一个 10MB 的结果 Float32Array < em>( double 的一半)几乎同时发生。

您有 1 个仅包含原始字节的 ArrayBuffer + 一个在内存中引用此数据的 Float32Array。


如果这对您不起作用,也许您可​​以解释您发送的数据的性质/结构。

或者也许是您在后端使用的代码(如果序列化是问题所在)。

关于javascript - 移动设备上性能更好的 JSON 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38281262/

相关文章:

java - 在序列化期间忽略 Jackson JsonIdentityInfo

.net - 多态 XML 序列化/反序列化

android - Android 中的 BinaryFormatter 序列化/反序列化替代方案

javascript - jQuery UI - 结合可选与可拖动

javascript - 图表未正确渲染,canvasjs

javascript - 如何在php中获取下拉值

objective-c - hasBytesAvailable 提前完成

c# - 具有复杂类型参数的 WebInvoke 不适用于 Json 端点

json - 解析 'valid' json 时出现意外标记 {

Javascript,如何在相同的输入类型文本字段中显示两个值?