【发布时间】:2013-09-19 08:30:09
【问题描述】:
我看到了很多 js 的压缩方法,但在大多数情况下,压缩数据是字符串形式的,并且包含文本。我需要在 0-1 范围内压缩小于 10^7 个浮点数的数组。
由于精度并不是很重要,最终我可以将其保存为仅包含数字 0-9 的字符串(每个浮点数仅包含 2 个小数点后的第一个数字)。什么方法最适合这样的数据?我希望输出尽可能小,但压缩这个字符串不应该超过 10 秒,每个浮点数保存 2 位数字时大约有 10 000 000 个符号。我看到了很多 js 的压缩方法,但在大多数情况下压缩数据是字符串,它包含文本。我需要在 0-1 范围内压缩小于 10^7 个浮点数的数组。
由于精度并不是很重要,最终我可以将其保存为仅包含数字 0-9 的字符串(每个浮点数仅包含 2 个小数点后的第一个数字)。什么方法最适合这样的数据?我希望输出尽可能小,但解压缩此字符串的时间不应超过 10 秒,每个浮点数保存 2 位数字时大约有 10 000 000 个符号。
数据包含声音波形记录,用于在不支持 Web Audio API 的旧浏览器上进行可视化。波形在 Chrome 用户客户端上以 20 fps 的速度记录,压缩并存储在服务器数据库中。然后在请求绘制可视化后发送回 IE 或 ff - 所以我需要有损压缩 - 实现能够与歌曲元数据请求一起发送的大小确实是有损的。我希望 wav -> mp3 64k 级别的压缩是可能的(比如 200:1 或其他东西)没有人会认识到波形在可视化上并不完美,我想也许将这些浮点数保存为 0-9a-Z 它给出 36 而不是100 步,但将一个频率的记录减少到 1 个符号。但是接下来,在这个带有 0-Z 符号的字符串上使用什么压缩来实现最佳压缩? lzma 适合这样的字符串吗?压缩/解压将在 Web Worker 上运行,因此它不需要真正即时 - 解压缩像 10 秒,压缩无关紧要 - 而不是一首歌,所以大约 2 分钟
【问题讨论】:
-
这个问题的答案在很大程度上取决于您的数据,就像所有压缩算法一样。您的所有值都是 0.01 - 1.00,比如百分比吗?或者是否有 0.0000042 隐藏在数据中。你对你的花车了解多少?如果它们都恰好是 0.05,那么压缩算法是微不足道的。从根本上说,如果你说你只需要 2 个十进制数字,那么这意味着每个浮点数需要大约 1 个字节左右的数据。如果您的浮点数都是 32 位的,那么这意味着您的最佳压缩率为 4:1。这够好吗?
标签: javascript arrays string performance compression