数优编码 All articles
安全与面试

中文内容选序列化格式,别只看压缩率:JSON、XML 与 Protobuf 实测对比

数优编码
中文内容选序列化格式,别只看压缩率:JSON、XML 与 Protobuf 实测对比

Photo: Addshore, CC BY-SA 4.0, via Wikimedia Commons

每逢技术选型,序列化格式的对比文章一搜一大把。但绝大多数基准测试用的都是英文样本数据——而中文有一个天然特点:在 UTF-8 下,一个汉字占 3 个字节,是英文字母的 3 倍。这个特性会实质性地影响各格式的表现,尤其是体积和压缩收益。

我们用一份混合语料(产品描述、用户评论、含 Emoji 的社交文本)做了几组实测,结论比想象中有趣。

体积:差距没有想象中大,但压缩会洗牌

同一份含大量中文的 JSON 文档:

要点:如果你的流量走 HTTPS 且开启压缩(大多数场景都是),JSON 和 Protobuf 的体积差距会被大幅抹平,这时候体积不该是你选 Protobuf 的首要理由。

多语言字符:三者都支持 UTF-8,但细节有坑

调试与协作:这是 JSON 的主场

坦白说,这一项没有悬念。用 curl 打一个返回 JSON 的接口,人眼直接可读;Protobuf 需要配合 .proto 文件和专用工具才能解读;XML 介于两者之间——可读但啰嗦。

对面向中国用户的业务来说还有一层:联调成本。前端、后端、测试三方都改一份 .proto 文件的流程,在快节奏业务迭代里经常成为摩擦点。Protobuf 的强 Schema 是优点也是枷锁,取决于你的团队协作模式。

生态兼容:看你的边界在哪

一张决策树

  1. 对外暴露 API? → JSON,没有讨论余地。
  2. 内部 gRPC 微服务、QPS 高、字段多? → Protobuf。
  3. 需要对接遗留 SOAP / 政企系统? → XML,配合严格的 UTF-8 声明。
  4. 其他情况? → JSON + Gzip,把省下的时间花在业务上。

最后说一句面试视角:如果面试官问「为什么你们用 JSON 而不是 Protobuf」,一个加分的回答不是背参数对比,而是像上文这样说出「压缩已开启时体积差距收窄、调试成本、团队协作摩擦」这三层权衡。选型题考的从来不是哪个格式更快,而是你能不能讲清楚为什么这个选择适合你的场景。

All Articles

Related Articles

面试官问「Base64 能保护数据吗」:90% 候选人都答错了

面试官问「Base64 能保护数据吗」:90% 候选人都答错了

别再手动拼 URL 了:一次中文参数乱码背后的完整编码链路排查

别再手动拼 URL 了:一次中文参数乱码背后的完整编码链路排查

从「锟斤拷」到 Emoji 崩库:一场字符编码引发的血案复盘

从「锟斤拷」到 Emoji 崩库:一场字符编码引发的血案复盘