【发布时间】:2012-04-12 23:24:09
【问题描述】:
我正在寻找一种在 javascript 中接受并返回原始二进制数据的无损压缩算法(如 LZW 或 Huffman 或其他任何东西)。
对于“二进制数据”,我指的是一个字节序列,它可以采用以下任何一种形式:
- 一个字符串,包含从 0 到 255 的任意值的字符
- 一个包含 0 到 255 之间任意值的整数的数组
- 包含数据的十六进制表示的字符串(即每个字节 2 个十六进制数字)
- 包含数据的 base64 编码表示的字符串
- 或任何其他可以明确转换为上述任何内容的内容
现在显然有大量的 javascript 实现随处可用,适用于各种算法。然而,我发现的一切似乎都在做一些疯狂的事情,比如:
-
返回一个包含值 >255 的数组(那么现在的压缩比是多少?如何以字节为单位表示,或者如何将其保存到文件中?)
弄乱字符串中的字符编码,从/到 unicode 或 url/html 实体或诸如此类的转换(它是 BINARY,字符编码不适用于此处!)
返回其他似乎不适合二进制存储的表示(即不能转换为字节序列)
有人知道适合我的二进制恋物癖的良好 javascript 压缩(+解压缩)实现吗?
【问题讨论】:
-
请记住,“低级”程序员直到最近才开始注意到 JavaScript,甚至出现了能够处理重要数据的快速 JIT。同样,请务必进行良好的测试,因为即使在现代浏览器之间,性能也存在很大差异。
-
谢谢,会的。我通常希望处理高达 10 或 15 KB 的数据块,即没有那么多,所以我希望客户能够在没有太多延迟的情况下压缩它。我使用压缩的原因是我希望 LOTS 客户端同时提交这样的数据块,所以任何可以降低服务器负载(通过压缩单个块客户端)的东西都会对我有所帮助。跨度>
-
这对于 JavaScript 来说是很多数据。这是一种语言,其中数组只是带有数字键的字典。因此,一个 10,000 个元素的数组可能是一个 10,000 个条目的哈希表,其中包含一个幼稚的 JS 实现和一个糟糕的 JIT。一年前我看到了一个类似的问题,当时发送二进制数据似乎是最前沿的。我现在看到了更多的在线资源,但您可能走在了潮流的前面。
-
超过 10 KB 的情况很少见,而且我已经用几种算法进行了测试,它们似乎可以立即执行压缩(除了它们以一种不容易的方式输出压缩结果转换为最小字节序列或base64字符串)
-
好吧,Firefox 在数以万计的数据点上运行 Highcharts 的速度比 Safari 快得多,物有所值。现在环顾四周,我从 WebGL 库中看到了很多关于 ArrayList 类的信息。这显然是二进制 JavaScript(并包括 AJAX 接口)的新亮点,因此您可能会寻找使用它的库。
标签: javascript algorithm encoding binary compression