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

时间:2012-04-07 18:31:32

标签: javascript base64 decode

最好的存储方式是什么?直接在js文件中的100个双精度序列?每个序列的长度为ca. 10 000或更多。

要求

  • javascript文件必须尽快执行

  • 我可以根据需要迭代序列(我不需要在js执行时解码所有数字。它们将在事件中解码。)

  • 它不应占用太多空间

最简单的选择可能是使用CSV格式的字符串,但是双打不会以最有效的方式存储,对吗?

另一种选择可能是将数字存储在Base64字节数组中,但后来我不知道如何将base64字符串读入double。

编辑:

我想在Adobe 3D注释中使用双打来转换3D节点的Matrix4x4。 Adobe允许导入外部文件,但它非常复杂,可能更容易将所有数据直接包含在js文件中。

1 个答案:

答案 0 :(得分:2)

正如我在评论中提到的,尝试对值进行编码可能不值得。以下是我脑子里关于存储双打所需数据量的一些值(从评论中更新)。

假设有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 +分隔符= 20 MB

注意:在最坏的情况下,double可以占用21个字节(假设精度为15位):1.23456789101112e-131

正如您所看到的,您仍然无法将其降低到使用带编码的普通文字值的1/2以下,如果您计划进行随机访问解码,它将变得复杂得多。最好坚持文字。使用您提到的外部文件可能会带来一些好处,但这取决于需要多少工作量。

关于如何使用文字进行优化的一些想法:

  • 根据所需的精度,您可以近似值并将值限制为5位精度。这将令人难以置信地缩短文件。
  • 您可以压缩文件。我认为您可以使用14个字符(0123456789.e-,)指定任意数量的双精度数,因此从理论上讲,您可以将这样的字符串压缩到其大小的一半。我不知道实际的现代压缩程序有多好。