【发布时间】:2016-11-11 21:14:04
【问题描述】:
我正在构建一个 webgl 应用程序。它需要对数据进行反序列化 ~15MB(这是单个对象的大小,我的应用程序中将有大约 10 个),并且该数据的较大部分(90%)是一些浮点数数组和这些数组需要在 JavaScript 中反序列化为 Float32Arrays。
目前我正在使用 JSON。由于我的数据包含大量重复数字,因此它是高度可压缩的,我对网络性能感到满意。除了。我也很满意它在桌面上的表现。然而,将数据加载、反序列化为纯 JS 数组,然后在移动设备上将它们转换为 Float32Arrays 需要花费大量时间。
我考虑过使用 protobuff,但我在 https://protobuffers.codeplex.com/ 上看到了这个
协议缓冲区不是为处理大消息而设计的。如果你是 处理大于一兆字节的消息,可能是时候 考虑另一种策略。
那么我可以做些什么来提高我的应用程序的性能。我应该测试哪些 SERDES 方法?
请引导我完成此过程并帮助我测试我的替代方案,如果您在 cmets 部分提出任何问题,我会提供更多详细信息。
【问题讨论】:
-
你看过 BSON 吗?
-
@Bergi 我现在就去看看!
-
这15MB是JSON序列化数据的大小,还是反序列化后内存中数据的大小?根据bsonspec.org/spec.html 看来,BSON 存储的是 64 位浮点数,而不是 32 位,这很遗憾。协议缓冲区有一个双精度和一个浮点数,因此对于您的 32 位浮点数数组,它可能比 BSON 更紧凑,并且很有可能更快。
-
@bazza 这是 JSON 的大小。但是,紧凑性目前不是我关心的问题。即使在本地环境中,移动设备上数据的加载/反序列化也非常缓慢。
-
坏主意:让服务器发送源代码来制作类型化数组,然后运行
eval。这将节省中间步骤。
标签: javascript json serialization deserialization