在移动设备上提供更好的JSON替代品

时间:2016-07-09 11:19:27

标签: javascript json serialization deserialization

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

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

我考虑使用protobuff,但我在https://protobuffers.codeplex.com/

上看到了这一点
  

协议缓冲区不是为处理大型邮件而设计的。如果你是   处理大于一兆字节的消息,可能是时候了   考虑另一种策略。

那么我该怎么做才能提高应用程序的性能。我应该测试哪些SERDES方法?

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

1 个答案:

答案 0 :(得分:1)

如果你的Object就像一个大的浮点数组,你可以发送原始字节而不是JSON编码的字符串。

XMLHttpRequestresponseType = "arraybuffer"。这样你的“解析步骤”就会减少到var floats = new Float32Array(xhr.response)

它甚至可以减少这个任务对内存的影响,因为你不需要保留一个15MB的大字符串+一个包含大约20MB双精度的中间数组,我想+得到的另外10MB的Float32Array < em>(一半的双打)大约在同一时间。

你有1个ArrayBuffer只包含原始字节+一个Float32Array在内存中引用这个数据。

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

如果序列化是问题,或者你在后端使用的代码。