你的网站是不是总感觉“慢半拍”?

点开自己网站,等三秒才出首页——你是不是也默默关掉过好几次?
别急着怪服务器,大概率是缓存没配对,不是网站不行,是它“喘不过气”。

缓存策略到底在解决什么问题?

缓存就干两件事:让用户少等几秒,让服务器少干点活。

用户点开一个页面,后台可能要连数据库、跑 PHP、压缩图片、拼 HTML……一整套流程下来,服务器累,用户烦。
缓存做的,就是把已经“做好的成品”先存起来。下次有人再点这个页面,直接把存好的结果甩出去,跳过所有中间步骤。

我们帮过一家本地生鲜电商,首页打开要八九秒。一查发现:每刷一次,系统都重新查一遍当天上架的几百个商品库存。高峰期数据库直接卡死,订单都下不了。

浏览器缓存应该怎么设置才合理?

浏览器缓存是你和用户之间最近的一道“快车道”。配好了,用户第二次访问,连图片、CSS 都不用重下。

关键看两个响应头:Cache-ControlETag

  • style.a1b2c3d4.css 这种带哈希值的 CSS 文件,内容不变就不会改名,放心设成 Cache-Control: public, max-age=31536000(一年)。
  • 但用户头像、个人中心页这类常变的内容,就别硬撑了,max-age=3600(一小时)更稳妥。

记住:文件名带哈希不是可选项,是必选项。不然你更新了 CSS,用户浏览器还蹲在旧版本里不动。

服务器端缓存有哪些必杀技?

服务器缓存才是扛大梁的。三类最常用:对象缓存、页面缓存、操作码缓存。

  • 对象缓存(比如 Redis)存的是数据库查出来的结果。比如“上海地区今日特价菜”这个查询,查一次存内存里,后面一百次请求都从内存读,快得离谱。
  • 页面缓存适合内容稳定、只局部变动的页面。比如博客文章页,正文几乎不改,只有评论区和阅读数在动。用 Nginx 的 fastcgi_cache 或 WordPress 插件(如 WP Super Cache)就能接住。
  • 操作码缓存(PHP 的 OPCache)是 PHP 站点的“呼吸机”——它把 PHP 脚本编译后的字节码存起来,省掉每次都要重新编译的折腾。只要用 PHP,这功能默认就该开着。

CDN缓存如何配置才能全球加速?

CDN 不是锦上添花,是刚需。它把你的图片、JS、字体这些静态资源,提前铺到全国各地甚至海外的节点上。用户点开,就近取货,不绕路。

CDN 上的缓存可以更“狠”一点:

  • 图片、JS、CSS 这类资源,缓存几个月没问题,前提是文件名带哈希;
  • HTML 页面别缓太久,设个几小时或配合 ESI(边缘侧包含),只动态拉取购物车数量、登录状态这类小块内容就行。

重点盯紧 CDN 后台的“缓存命中率”。如果经常显示“MISS”,说明大量请求还是回源了——那你的缓存规则大概率漏了关键路径,比如忘了给 /assets/ 下的所有文件统一加规则。

哪些内容绝对不能缓存?

别让缓存变成“定时炸弹”。以下这几类,宁可慢一点,也不能错:

  • 用户登录后的个人主页(含订单、收货地址)
  • 购物车页面
  • 后台管理界面
  • 实时数据展示页(比如后台实时订单流)

处理方式很简单:

  • 直接加 Cache-Control: no-store,告诉浏览器“别存,连影子都别留”;
  • 或者用 private,允许缓存但仅限当前用户;
  • 更聪明的做法是“片段缓存”:导航栏、页脚这些通用模块照缓,中间核心区域保持动态。

真实翻车现场:某教育平台缓存了学生课程表页面,结果 A 学生退出后,B 学生刷新看到的还是 A 的课表——不是体验差,是合规红线。

怎么判断缓存策略是否真的生效?

配完不验证,等于没配。

打开 Chrome,按 F12 → 切到「Network」→ 刷新页面 → 找一个 CSS 或图片文件,点开看「Headers」标签页:
✅ 有 Cache-Control 字段,且 max-age 是你设的值(比如 31536000)
Status 显示 200 (from memory cache)304,而不是每次都 200 OK
✅ 查看「Size」列,如果是 (memory cache)(disk cache),说明真缓上了

顺手再看看服务器监控:数据库查询量有没有明显下降?PHP-FPM 进程占用稳不稳定?这些比任何测试工具都实在。

今天下班前就能搞定的一步操作

现在,就打开你的网站,随便点开一篇博客或产品页。
用 Chrome 开发者工具(F12),在 Network 标签里找一个 .css.jpg 文件,点开看它的响应头。

如果压根没看到 Cache-Control,或者写着 max-age=0max-age=60 这种几秒几十秒的值——恭喜,你找到了今晚第一个优化点。

立刻去你正在用的环境里改:

  • 如果是 Nginx,打开 nginx.conf 或站点配置,在 location ~* \.(css|js|png|jpg|gif|ico)$ 区块里加上 add_header Cache-Control "public, max-age=2592000";(一个月);
  • 如果是 WordPress,打开你装的缓存插件(比如 WP Super Cache 或 LiteSpeed Cache),找到「浏览器缓存」设置,勾选 JS/CSS/图片,缓存时间调到 30 天起步。

改完 reload Nginx 或刷新插件缓存,再测一次——你会亲眼看见那个 from memory cache 出现在屏幕上。