下游缓存Clough Dynamics of Structures解析

下游缓存的操作逻辑,蛮像你点外卖时餐厅还没接单,但平台先把你之前点过的菜单给你缓存着。Clough 的《Dynamics of Structures》虽然是结构力学的书名,但这节“下游缓存”讲得挺贴地气,尤其是针对 Web 项目部署时缓存失控的问题,得蛮透彻。

浏览器的缓存你应该挺熟了,比如用 Ctrl+F5 强制刷新页面啥的。但你知道吗?有时候你写的网页都没机会执行,ISP 或代理服务器就把缓存直接甩给用户了,根本不打你后端的电话,像是把外卖送到别人门口还写你名字。

这时候就得靠 HTTP 首部救场了,是 Vary 首部。简单说,你可以告诉缓存系统:喂,我这个页面要看用户的 Cookie、语言或设备类型再决定内容,别瞎缓存!Django 默认按 URL 缓,但多页面内容其实和用户状态关系大,不设置好 Vary 会出事。

举个例子,像 Web 邮箱这种服务,如果 ISP 缓存了 A 用户的收件箱页面,结果 B 一刷新就看到别人的邮件,这影响就大了。所以下游缓存虽然提升性能,但你得搭配正确的首部使用,不然容易翻车。

总的建议是:只要你的页面内容会随着用户状态或求头变化,就不要省略 Vary;另外本地调试缓存时,可以用 Chrome 的 DevTools 里的 Network 面板,观察 Response Headers 里的 Vary 字段,心里有底。

如果你对浏览器缓存机制还不太熟,推荐你看看这几个文章:

如果你最近在搞 Web 性能优化,或者部署上线时老遇到“怎么改了页面还是老的”这种问题,强烈建议你好好研究下“下游缓存”和 Vary 这些老朋友,挺值的。

pdf 文件大小:7.34MB