你的网站是不是总感觉“慢半拍”?
点开自己网站,等三秒才出首页——你是不是也默默关掉过好几次?
别急着怪服务器,大概率是缓存没配对,不是网站不行,是它“喘不过气”。
缓存策略到底在解决什么问题?
缓存就干两件事:让用户少等几秒,让服务器少干点活。
用户点开一个页面,后台可能要连数据库、跑 PHP、压缩图片、拼 HTML……一整套流程下来,服务器累,用户烦。
缓存做的,就是把已经“做好的成品”先存起来。下次有人再点这个页面,直接把存好的结果甩出去,跳过所有中间步骤。
我们帮过一家本地生鲜电商,首页打开要八九秒。一查发现:每刷一次,系统都重新查一遍当天上架的几百个商品库存。高峰期数据库直接卡死,订单都下不了。
浏览器缓存应该怎么设置才合理?
浏览器缓存是你和用户之间最近的一道“快车道”。配好了,用户第二次访问,连图片、CSS 都不用重下。
关键看两个响应头:Cache-Control 和 ETag。
- 像
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=0、max-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 出现在屏幕上。