如何缓存 OG 图片
缓存 OG 图片意味着从 CDN 提供先前生成的社交预览图,而不是在每次分享时重新渲染。FastOG 会在边缘节点缓存相同的图片长达一年——相同的 URL 会返回缓存的 PNG,不会计入您的配额,且延迟几乎为零,因此网站的大部分 OG 流量不会触及渲染器。
为什么缓存很重要
社交分享会触发平台爬虫的抓取请求。如果每次分享都重新渲染,你会在相同内容上浪费配额和延迟。积极的缓存——以图片内容为键——将“每次分享计 1 次渲染”转变为“首次分享计 1 次渲染,其余分享免费”。
让这一切生效的内容键控模型
FastOG 使用内容签名 URL:URL 是参数的纯函数。相同的标题 + 模板 → 相同的 URL。这意味着:
- FastOG 的边缘网络将该图片保存在该 URL 下。
- 相同内容被分享 10,000 次 → 一次渲染、一次配额计数、9,999 次缓存命中。
- 更改内容 → 不同的 URL → 一次新的渲染。
GET /api/v1/og?title=Hello&template=default&key=...&s=... → render (1 quota count), then
GET /api/v1/og?title=Hello&template=default&key=...&s=... → cached (0 counts, instant)
GET /api/v1/og?title=Changed&template=default&key=...&s=... → render (1 quota count)
FastOG 的缓存标头
FastOG 对渲染后的图片返回 Cache-Control: public, max-age=31536000, immutable(一年)。封面图通过 FastOG 的边缘网络分两层提供:位于 fastog.com 之前的渲染缓存,以及其后方的持久化对象存储。重复请求无需重新渲染即可响应,响应中的 X-FastOG-Worker-Cache 会标明由哪一层应答(HIT、R2、MISS)。
由于持久化副本不依赖渲染服务,至少被请求过一次的封面图在 FastOG 渲染服务短暂不可用期间仍会持续提供——服务中断不会让已生成的预览图变成空白。唯一需要渲染服务的情况是封面图从未被渲染过,此时 FastOG 会返回图片而非错误:
| 情况 | 爬虫获取到的内容 |
|---|---|
| 封面图已渲染 | 封面图,来自边缘网络或持久化存储 |
| 从未渲染,渲染服务正常 | 封面图,按需渲染 |
| 从未渲染,渲染服务短暂不可用 | URL 中携带的页面自身图片(您的产品照片),或一张中性卡片——绝不会是错误页 |
如果请求本身无效(签名被篡改、缺少 title),您仍会收到对应的 4xx 响应。
修改已发布的图片
| 您修改的内容 | 需要做什么 |
|---|---|
| 内容(标题、价格、照片) | 无需操作:内容包含在 URL 中,因此新内容对应新 URL,会自动重新渲染 |
| 模板或渲染默认值 | 更新缓存失效版本号(FASTOG_CACHE_BUST),使每个 URL 都获得新的 v 参数 |
| 需要重新渲染同一个 URL | 请联系支持团队清除该 URL 的缓存——精确 URL 的清除功能未作为公开接口开放 |
已分享的链接会继续正常工作,并继续显示其承诺的图片,除非您清除该精确 URL 的缓存。
自行缓存 og:image(自托管)
如果您自行存储图片,而不是使用 FastOG 的缓存,请遵循相同的规则:
| 步骤 | 详情 |
|---|---|
| 缓存键 = 内容哈希 | 按数据的哈希值存储,而不是可变的文件名 |
| 长 TTL | 对稳定内容使用 max-age=31536000, immutable |
| 版本化 URL | 内容变更时附加哈希/版本号 |
| 前置 CDN | 让 CDN 吸收重复请求 |
常见问题
重复分享真的不消耗渲染次数吗?
是的。相同的 URL 会命中边缘缓存,不会到达渲染器——不消耗配额次数。
FastOG 会缓存图片多久?
一年(immutable)。首次渲染后很长时间内,分享卡片都会从缓存中提供。
如果我希望图片更新(例如实时价格)怎么办?
更改参数(价格)→ 生成新 URL → 重新渲染。稳定内容保持缓存;动态内容在您需要时更新。