当前位置: 首页 > news >正文

压缩算法详细对比

一:“压缩率”和“速度”是相对等级,不是跨平台固定数值;设备端表现必须以 ESP-IDF 构建和真机数据为准。

算法压缩率压缩 / 解压速度设备端 RAM代码体积生态与格式本项目判断
LZ4 Frame 中低 极快 / 快 低;通常需 64 KiB 级历史窗口,可配置独立块 中等 成熟,桌面端与 C 端都易接入 首选
Heatshrink 中低至中 较慢 / 较慢 极低;窗口可缩到数百字节至数 KiB 很小 嵌入式友好,但桌面工具和归档生态较弱 极低内存备选
DEFLATE / gzip 中慢 / 中 中;典型 32 KiB 窗口外加状态 中等 最通用,几乎所有平台都有 兼容性备选
Zstandard 快 / 很快 中高;取决于窗口,常见配置明显高于 LZ4 较大 优秀,支持字典、校验和丰富参数 资源充足时升级项
Snappy 极快 / 极快 低至中 中等 库成熟,但标准文件格式与工具链不如 LZ4 没有明显优势
Brotli 慢 / 中 Web 生态强,嵌入式文件传输生态一般 不建议
LZMA2 / xz 很高 很慢 / 慢 很高 桌面归档成熟 不适合实时设备端

逐项判断

LZ4 Frame

Frame 格式自带长度、块边界和可选内容校验,比裸 LZ4 Block 更适合协议传输。建议使用 64 KiB block、独立块模式, 设备以小输入/输出缓冲循环处理;独立块会略降压缩率,但状态更简单。

Heatshrink

最大价值是窗口和 lookahead 可编译期控制。如果 Classic ESP32 的可用内存无法承受 LZ4 实测需求,它是可靠退路, 但不应仅凭“嵌入式专用”就默认选择。

DEFLATE / gzip

最大优势是兼容性。缺点是设备压缩端 CPU 成本偏高;双向实时压缩时可能拖慢下载生成。若要求用户无需专用工具即可解压, gzip 才有明显产品价值。

Zstandard

综合压缩率和桌面速度优秀,但解码内存由 frame window 决定,不能接受任意外部 zstd 文件。若未来支持,协议必须限制最大 window, 并拒绝超出设备能力的 frame。

Brotli 与 LZMA2

更适合离线分发,不适合设备边读边压缩下载。它们增加 CPU、RAM、代码体积和超时风险,节省的字节未必能抵消工程复杂度。

Snappy

性能定位与 LZ4 接近,但文件格式、命令行工具和嵌入式采用面没有形成足以替代 LZ4 的优势,因此无需首版同时支持。

 

二:归档格式与协议承载

组合适用对象流式特性实现复杂度建议用途
单文件 + LZ4 Frame 单文件 天然流式;头部即可开始解压 简单 单文件上传、OTA
TAR + LZ4 Frame 文件夹 天然顺序打包/解包,无需尾部索引 简单 文件夹双向传输首选
ZIP 文件/文件夹 中心目录通常在尾部;流式生成、恢复和统一校验更复杂 中高 强调桌面直接打开时
Zstd tar 文件夹 流式良好,但设备端内存与代码体积更高 后续高压缩率档位
自定义分块容器 任意 可做块校验、索引和断点恢复 未来确实需要压缩流断点续传时

协议不应只保存一个 compression 字段

线上的对象信息

algorithm:NONE / LZ4_FRAME,预留 ZSTD、HEATSHRINK。

archive:NONE / TAR。

mode:STORE、DECOMPRESS、EXTRACT、COMPRESS、ARCHIVE_COMPRESS。

wire_size:HFT 实际接收或发送的字节数。

original_size:解压后的总字节数,用于容量和压缩炸弹限制。

完整性与限制

wire_sha256:压缩流或存储包的完整性。

content_sha256:还原后单文件内容;文件夹使用 manifest 哈希。

max_filesmax_depth:限制归档规模。

overwrite_policy:拒绝、替换或原子提交。

frame_window:未来支持 Zstd 时必须参与能力校验。

TAR 解包安全边界
拒绝绝对路径、..、路径穿越、符号链接、硬链接、重复目标路径、超长名称以及设备文件类型。 先写临时目录,所有文件与 manifest 校验成功后再提交;失败或断连必须清理临时内容。

为什么不首选 ZIP

ZIP 对桌面用户很友好,但目录信息、每文件压缩方式、数据描述符和尾部中心目录会扩大解析状态机。 当前目标是设备端稳定的顺序流,TAR 只需要依次读取 header 和 payload,更适合 LittleFS、SD 卡和 PSRAM Backend。 如果产品明确要求“传下来的包可被系统文件管理器直接打开”,再增加 ZIP 的“仅保存”模式即可,无需设备端首版解包 ZIP。

 

 

三:按场景选择:

场景推荐格式/流程关键说明
OTA 压缩上传 签名后的完整 .ota 再套 LZ4 Frame 设备先解压,再交给现有 OTA Backend;签名仍覆盖原始 HOTA 数据
普通单文件上传并还原 LZ4 Frame 流式解压 不保存压缩包;写临时文件,原始 SHA-256 通过后提交
文件夹上传并还原 TAR + LZ4 Frame 流式解包 限制路径、文件数、目录深度和解压后总大小
上传但保留压缩包 原样保存 .lz4 / .tar.lz4 HFT 不解压,仅校验传输数据与压缩包哈希
单文件压缩下载 Backend → LZ4 Frame → HFT 设备实时压缩,不必先生成中间文件
文件夹压缩下载 Backend → TAR → LZ4 Frame → HFT 先输出 TAR 元数据,再顺序读文件并压缩
已压缩媒体或归档 RAW 或 AUTO 跳过压缩 PNG/JPEG/MP4/ZIP 等通常收益很低,继续压缩可能变大
极小文件 RAW 压缩头和协商开销可能超过节省量

AUTO 模式建议:

1. 小于可配置阈值的文件直接 RAW,避免 frame 头和初始化开销。

2. 对输入前若干 KiB 试压缩;收益低于阈值时切回 RAW,并在 OPEN 响应中返回实际模式。

3. 识别 PNG、JPEG、MP4、ZIP、gzip、LZ4、Zstd 等格式,默认不重复压缩,但允许用户强制。

4. 文件夹总是先 TAR;是否再 LZ4 由试压缩和用户策略决定。

5. 设备不能擅自把 STORE 改成 EXTRACT,或把 EXTRACT 改成 STORE;只有请求端选择 AUTO 时才能自动决策。

 
http://www.jsqmd.com/news/1400762/

相关文章:

  • 【大模型RAG生成式AI开发实战】《大模型RAG生成式AI开发实战》_7.[第1章 RAG基础概念] RAG技术栈选型指南:LlamaIndex、LangChain还是Haystack
  • 从「越用越差」到「越用越强」—锂电池早期容量异常上升的工程启示
  • 具身智能论文学习7:Diffusion Policy: Visuomotor Policy Learning via Action Diffusion
  • Java开发者转型AI应用开发的3个月高效路线
  • 小团队研发协作的隐形内耗,MonkeyCode 是这样化解的
  • 手把手玩转 MHY_Scanner:Windows 扫码登录与直播抢码的 3 步实战指南
  • PKC 第 126 个开关:隐藏 PKC的位置、验证方法与风险边界
  • Langgraph使用MemorySaver建立有记忆的图
  • Kerberos非约束性委派攻击原理与防御实践
  • 2026深圳水利水电监理资质乙级代办机构实力解析与高效服务评估 - 卓企推荐
  • OpenLayers加载高德瓦片与GCJ02坐标转换实战(08)
  • 成本5毛扒光顶级大模型思路,千亿AI壁垒被一招击穿
  • 中间件设计模式解析:从管道与过滤器到生产级实践
  • 2026 AI视频生成器技术选型:Veo 3.1、Gen 4.5与Firefly API深度对比
  • 哈希表核心原理与Java实现:从数组链表到HashMap源码解析
  • 宇树IPO:机器人产业商业化与生态构建的硬仗
  • PKC 第 125 个开关:显示输入框边框的位置、验证方法与风险边界
  • 螺吡喃光致变色:从分子开关原理到智能材料应用
  • LaserGRBL 入门指南:新手 5 步跑通第一次激光雕刻(含参数调优与 FAQ)
  • ReactOS 图形系统分析(29):DIB 引擎与 DIB 库 — gdi/dib/ + gdi/diblib
  • 选择纸尿裤设备应从哪些方面考量,如价格、性能和售后? - 优企甄选
  • Base64 编码方式详解
  • Windows下使用nvm管理多版本Node.js:安装、配置与最佳实践
  • [通信与计算]复变函数:概念及其与通信的联系
  • AI Agent从无到有18:LangChain 开发环境搭建与首条链的运行
  • 1分钟完成歌词下载:163MusicLyrics如何打通网易云与QQ音乐的取词流程
  • ncmdump 使用教程:一文搞定网易云音乐NCM文件转换,把加密音乐还给你
  • Day14 unitree_G1人形机器人BVH/MocapApi实际输出少于Axis排查
  • 从单智能体到多智能体协作:L2M2 框架如何破解 LLM 多智能体系统的可扩展性瓶颈
  • AI增强调试:从日志分析到PID调优的智能实践