如何在 javascript 文件中将大型双精度序列存储为文字字符串



大约 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-, ),所以理论上,您可以将这样的字符串压缩到其大小的一半。我不知道实用的现代压缩例程有多好。

最新更新