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

目前,我正在使用JSON。由于我的数据包含许多重复数字,因此它具有高度可压缩性,并且对网络性能感到满意。除了。我也对它在台式机上的性能感到满意。但是,将数据加载,反序列化到纯JS数组中,然后在移动设备上将它们转换为Float32Arrays会花费很多时间。

我考虑过使用probuff,但是我在https://protobuffers.codeplex.com/上看到了


  协议缓冲区不适用于处理大消息。如果你是
  处理每个大于一兆字节的消息,可能是时候
  考虑另一种策略。


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

请引导我完成此过程,并帮助我测试其他选择,如果您在评论部分提出任何疑问,我会提供更多详细信息。

最佳答案

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

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

而且它甚至可以减少此任务对内存的影响,因为您不需要保留15MB的大字符串+可能包含大约20MB两倍的中间数组,我想+生成的Float32Array包含另外10MB(一半的加倍)。

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


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

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

10-06 04:14