【发布时间】:2021-01-19 07:02:53
【问题描述】:
我正在开发一个 JavaScript 压缩库。我已经创建了一个相对快速的 DEFLATE 压缩器和解压缩器,但是它们需要在使用之前将数据完全加载到内存中。我不认为为压缩添加流支持应该太难了。我可以将任何可用的数据压缩成一组完整的块,将结果附加到输出流,并避免设置 BFINAL 标记,直到最后一个块被传递。但是,解压流会出现问题。
由于我的代码当前需要读取一个完整的块来生成输出并且不保留状态,所以我能做的最好的就是猜测一个块有多长,并希望我能到达终点,因为如果我不这样做,我已经浪费了多个 CPU 周期来读取未完成块的标题、霍夫曼代码、长度/文字和距离代码,我将不得不从头再来。这似乎是一种糟糕的解决问题的方法,我想知道是否有任何其他方法可以做到这一点,而不涉及重写我的代码以保留状态。
【问题讨论】:
-
您是否在浏览器中执行此操作?如果是这样,为什么不让浏览器为您处理呢?
-
浏览器实际上并没有 JS 的压缩或解压 API,尽管它支持压缩的 Content-Encoding。我们最接近的是 Chrome 特定的,处于草稿阶段,并且比我的完全加载数据的库慢:wicg.github.io/compression
标签: javascript stream compression deflate chunking