站点运营

站点运营:缓存與 CDN 自查,別让更新後的内容迟迟不生效

更新了頁面却看不到變化,很多时候不是没發布,而是缓存没處理好。本文梳理浏览器缓存、CDN 缓存和應用层缓存各自的职责,给出一份發布後可直接执行的自查清單與驗證流程,帮助运营在速度和内容新鲜度之間找到平衡。

站点运营

站点运营:缓存與 CDN 自查,別让更新後的内容迟迟不生效

做站点运营时,最容易忽略的一類問题不是頁面寫错了,而是頁面改了却没人看到。你把标题、正文、價格都更新了,訪客看到的還是舊版本,抓取工具拿到的也是舊版本。這往往不是發布失敗,而是缓存没有處理好。缓存本身是好東西,它能降低服務器压力、加快首屏速度,問题在于缺少規則和驗證。

先搞清楚改的是哪一层缓存

一次請求從浏览器到源站,可能经過好几层缓存。定位問题时,先把层次分清楚,比盲目刷新有效得多。

  • 浏览器缓存:由 Cache-Control、Expires 等响應头控制,缓存在訪客本地,你無法遠程清理。
  • CDN 或反向代理缓存:缓存在邊缘节点上,同一地区用戶可能共享同一份内容。
  • 應用层缓存:頁面缓存、對象缓存、資料库查询缓存,常见于動態站点和框架层。
  • 服務端脚本缓存:如 PHP 的 OPcache、模板编译缓存,改動後需要確認是否自動失效。

自查清單:更新之後要確認的几件事

1. HTML 文档不要設定長缓存

HTML 是内容的入口,建议使用較短的 max-age,或者 no-cache 配合 ETag、Last-Modified,让浏览器每次回源做一次校驗。真正适合長缓存的,是带版本指纹的 CSS、JS 和图片。

2. 静態资源用文件名指纹

修改样式或脚本时,同时更改文件名或加 hash 後缀,例如 style.3f9a2.css。這样舊文件可以繼續被缓存,新文件自然走新地址,不必依赖人工刷新节点。

3. CDN 缓存規則按目錄和類型区分

  • 文章詳情頁:可以缓存几分钟到几十分钟,並允许回源校驗。
  • 首頁和频道頁:按更新频率設定較短缓存,避免長期停在舊版本。
  • 登入態、购物车、後台入口:不缓存,或按 Cookie 绕過缓存。
  • 带參數的地址:確認規則是否忽略無關參數,別让每個跟踪參數都生成一份獨立缓存。

4. 主動刷新要有记錄

發布之後,明确知道需要刷新哪些 URL,並尽量通過接口批量提交,把刷新動作寫進發布流程。靠“等一會儿再看看”容易漏掉關键頁面。

一個可执行的驗證流程

  1. 用無痕窗口打開頁面,排除本地缓存干扰,確認内容是否為最新。
  2. 在開發者工具的 Network 面板查看 HTML 响應头,關注 Cache-Control、Age、ETag 以及 CDN 返回的命中标识。
  3. 換一個網絡环境或不同地区节点再請求一次,確認邊缘节点也已更新。
  4. 检查带參數的地址是否返回同样的内容,避免參數版本停留在舊頁。
  5. 查看最近的抓取记錄,確認抓取工具拿到的版本與後台一致。

缓存和内容更新之間的關系

抓取工具看到的是它抓取那一刻的版本。如果邊缘节点長期返回舊頁面,抓取结果就和後台内容不一致,更新可能很久都不被反映。所以缓存策略不只是性能問题,也關系到内容更新能否被及时發現。

常见誤区

  • 把“清缓存”当成萬能药,每次改動都全站刷新,反而让缓存失去意义。
  • HTML 和静態资源套用同一套長缓存規則。
  • 只在本地測試,忽略了 CDN 邊缘节点的狀態。
  • 移動端和桌面端共用缓存键,導致一端看到另一端的頁面。
  • 忘记给 404、301 這類响應設定合适的缓存,让错誤结果被長期记住。

把缓存寫進發布清單

建议在每次内容發布或改版前,固定回答几個問题:本次改動了哪些 URL;這些 URL 经過哪几层缓存;是否需要主動刷新;刷新之後用什么方式驗證。把答案记錄下来,缓存就從一件凭感觉的事,變成流程里可以检查的一环。缓存的目标從来不是让内容永不更新,而是在响應速度和内容新鲜度之間找到合适的平衡点。