5 个版本
0.3.1 | 2024年4月14日 |
---|---|
0.3.0 | 2024年4月13日 |
0.2.3 | 2024年4月10日 |
0.2.2 | 2024年4月10日 |
0.2.1 | 2024年4月10日 |
#1 in #kindle
36KB
477 行
🖐️ palmdoc-compression
这是 PalmDoc 风格 LZ77 压缩(主要用于亚马逊电子书格式)的快速、安全且正确的实现。压缩速度比 Calibre 的实现快 300-400倍,压缩比相当。
此 crate 还包括 Calibre 的版本,用于比较和可选使用,位于 calibre
功能之后。
使用方法
use palmdoc_compression::{compress, decompress};
let data = b"hello world";
let compressed = compress(data);
let decompressed = decompress(&compressed).unwrap();
assert_eq!(data, decompressed);
⚡ 基准测试
MOBI/AZW 文件被分成 4KB 块,因此这里的基准测试也使用 4KB 块。基准测试在 M1 Max 上运行。
对于 4KB 的 lorem ipsum 文本
解压缩 | 压缩 | |
---|---|---|
Calibre | 922 MiB/s | 252 KiB/s |
palmdoc-compression | 797 MiB/s | 109 MiB/s |
对于来自 Project Gutenberg 的《战争与和平》的随机 4KB 块
解压缩 | 压缩 | |
---|---|---|
Calibre | 1011 MiB/s | 336 KiB/s |
palmdoc-compression | 876 MiB/s | 103 MiB/s |
(使用 cargo bench --features calibre
重复。)
压缩比
通过将 Project Gutenberg 的《战争与和平》以 4KB 块压缩计算出的比率。
比率,⬇️ 表示更好 | |
---|---|
calibre | 0.56%(理论最大值) |
palmdoc-compression | 0.57% |
(使用 cargo run --example ratios --release --features calibre
重复。)
致谢
- LPeter1997 为 Rust LZ77 的清晰易懂实现和 哈希链
- Calibre 为带有测试的参考实现
依赖关系
~0.2–0.9MB
~20K SLoC