大约 100 个双精度序列直接存储在 js 文件中的最佳方法是什么?每个序列的长度约为 10 000 次双精度或更多。
要求
JavaScript 文件必须尽可能快地执行
对我来说,按需迭代序列就足够了(我不需要在 js 执行时解码所有数字。它们将在事件中解码。
它应该不会占用太多空间
最简单的选择可能是使用 CSV 格式的字符串,但双精度没有以最有效的方式存储,对吧?
另一种选择可能是将数字存储在 Base64 字节数组中,但我不知道如何将 base64 字符串读取为双精度。
编辑:
我想使用双精度来转换Adobe 3D注释中3d节点的Matrix4x4。Adobe允许导入外部文件,但它非常复杂,直接将所有数据包含在js文件中可能更简单。
正如我在评论中提到的,尝试对值进行编码可能不值得。以下是我脑海中关于存储双精度所需数据量的一些值(从评论中更新)。
假设有 1,000,000 个值:
- 使用直接编码(在 JS 文件中效果不佳):8 B = 8 MB
- 使用 base64:10.7 B = 10.7 MB
- 文本(最佳大小写):1 B + 分隔符 = 2 MB
- 文字(最坏情况):21 B + 分隔符 = 22 MB
- 文字(假设值均匀分布的平均大小写):19 B + 分隔符 = 20MB
注意:在最坏的情况下,双精度可能需要 21 个字节(假设精度为 15 位):1.23456789101112e-131
如您所见,您仍然无法将其削减到使用纯文本值和编码的 1/2 以下,如果您打算进行随机访问解码,它会很快变得复杂。最好坚持使用文字。使用您提到的外部文件可能会给您带来一些好处,但这取决于这样做需要多少努力。
关于如何使用文字进行优化的一些想法:
- 根据所需的精度,您可以近似值并将值限制为 5 位精度。这将非常缩短文件。
- 您可以压缩文件。我认为您可以使用 14 个字符指定任意数量的双精度,(
0123456789.e-,
),所以理论上,您可以将这样的字符串压缩到其大小的一半。我不知道实用的现代压缩例程有多好。