用一句话理解物流面单工作负载
每个订单生成一份 PDF,每份 PDF 在热敏打印机上打印一次;如果系统变慢,失败模式不是“页面加载慢”,而是“仓库提货口被你的面单渲染 API 堵住”。物流面单是一个 p99 延迟就是核心产品指标的场景;重打很常见,所以确定性输出很重要;条码质量也不是看像素,而是看 GS1 X-dimension 公差能否让扫描枪第一次就读出来。
基于无头浏览器的 PDF 栈很难同时满足这三点:峰值下冷启动成本会叠加,小尺寸热敏标签上的栅格条码会退化,字体栅格化还会随 Chromium 版本漂移,因此“字节一致的重打”基本不可实现。
为什么 gPdf 适合
一张 4×6 英寸热敏面单很小(203 dpi 下为 576 × 864 像素)、元素数量少(文本块、1-2 个条码、可选承运商 Logo),但量很大(中型 3PL 每天渲染 5 万到 50 万张)。这正是 gPdf 面向的工作负载。渲染器会:
- 一次性解析版式:页面坐标、字体级联和条码几何在请求时解析,不依赖浏览器 layout engine。
- 将每个条码矢量化:模块直接绘制进 PDF 流,让 30 mm 宽的 GS1-128 在 203 dpi 或 600 dpi 下都能清晰读取,调用方不需要自行处理 DPI 感知的栅格化逻辑。
- 嵌入 NotoSans CJK + Latin:同一份数据里的中文承运商名称也能正确渲染,不需要你在渲染容器里额外准备字体。
在我们的参考工作负载中(EU-WEST 上对上方样例执行 1,000 次调用),p99 稳定在 8 ms。单个 isolate 是刚渲染 1 张面单,还是已经渲染 1 万张面单,结果都一样。
量级与成本计算
一个典型中型 3PL 大约每天处理 5 万张面单,也就是每月约 150 万页。按 Basic 套餐(5 美元/月含 10 万页,超出部分每页 0.00005 美元) 计算:
150 万页 × 0.00005 美元 = 75.00 美元超额费用
+ Basic 套餐基础费用 = 5.00 美元
─────────────────────────────────────
合计 = 80.00 美元/月
同样的工作负载如果放在 Puppeteer-on-Lambda 上,以常见 Lambda 并发配置计算,通常会落在 200-400 美元/月 区间;这还没计入高峰期的冷启动成本。
Black Friday 示例
峰值冲击最能体现 Edge 渲染的价值。假设一个零售客户在 Black Friday 第一小时达到平时 200% 的面单量:60 分钟内生成 10 万张面单,平均每分钟 1,700 张,峰值突发达到每分钟 5,000 张。这个工作负载可以在单个 Cloudflare Workers 区域池内完成,没有冷启动税。
同样的工作负载如果跑在按平均流量配置的 Puppeteer 预热池上,突发扩容出来的容器会产生 1.5-2.5 秒冷启动,仓库提货台会切实感受到每一次延迟。
下一步
- JSON Render API 覆盖上方面单样例用到的每个字段。
- 想深入理解条码几何,请看 GS1-128 精度文章。
- 要替换 iText 面单流水线?请看 gPdf vs iText 物流标签对比,或完整的 每月 10 万到 1 亿页 shipping-label TCO 拆解。
- 如果要和 Chromium 栈比较,请看 gPdf vs Puppeteer。