Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript文件中以文本字符串形式存储大的双精度序列_Javascript_Base64_Decode - Fatal编程技术网

如何在javascript文件中以文本字符串形式存储大的双精度序列

如何在javascript文件中以文本字符串形式存储大的双精度序列,javascript,base64,decode,Javascript,Base64,Decode,在js文件中直接存储约100个双倍序列的最佳方法是什么?每个序列的长度约为10000倍或更多 要求 javascript文件必须尽可能快地执行 对我来说,按需迭代序列就足够了(我不需要在js执行时解码所有数字,它们将在事件发生时解码) 它不应该占用太多空间 最简单的选择可能是使用CSV格式的字符串,但是double并不是以最有效的方式存储的,对吗 另一种选择可能是将数字存储在Base64字节数组中,但我不知道如何将Base64字符串读入double 编辑: 我想使用double来转换Adob

在js文件中直接存储约100个双倍序列的最佳方法是什么?每个序列的长度约为10000倍或更多

要求

  • javascript文件必须尽可能快地执行

  • 对我来说,按需迭代序列就足够了(我不需要在js执行时解码所有数字,它们将在事件发生时解码)

  • 它不应该占用太多空间

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

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

编辑:


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

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

假设1000000个值:

  • 使用直接编码(在JS文件中无法正常工作):8b=8MB
  • 使用base64:10.7B=10.7MB
  • 文字(最佳情况):1 B+分隔符=2 MB
  • 文字(最坏情况):21 B+分隔符=22 MB
  • 文字量(假设平均分布值的平均大小写):19 B+分隔符=20MB
注意:在最坏的情况下,一个double可能需要21个字节(假设精度为15位):1.23456789101112e-131

正如您所看到的,您仍然无法将其削减到使用编码的纯文本值的1/2以下,并且如果您计划进行随机访问解码,它将很快变得复杂。最好还是坚持使用文字。使用您提到的外部文件可能会带来一些好处,但这取决于需要付出多少努力

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

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

你用这双鞋干什么?如果我们能看到全局,可能会有比您提到的更有效的解决方案。我想使用双精度变换Adobe 3d annotations中3d节点的Matrix4x4。Adobe允许导入外部文件,但它非常复杂,直接将所有数据包含在js文件中可能更简单。您是如何生成这些数字的?除非你真的有时间输入一百万个数字,否则你必须使用一些东西来生成它们,这意味着可能有一个公式来计算它们,而不是实际包含它们。我通过一个非常耗时的模拟来生成它们。使用文字值有问题吗?根据我的计算(使用您给出的数字),直接编码产生8MB的数据大小,base64编码产生10.7MB的大小,使用文字值产生2MB到16MB的大小。