引言
最近在打磨我的轻量级论坛系统(FlintHub),遇到一个很经典的问题:页面加载速度。我的系统是纯 PHP + SQLite,还自研了分片引擎(SplitDB),但页面查询次数一直降不下来,首页 28 次查询,虽然不算多,但总觉得还能再优化。
后来跟朋友聊天,随口说了一句:“把缓存放用户浏览器里,页面加载是不是更快?”
结果聊着聊着,居然聊出了一个双层缓存架构。今天把这个思路分享出来,看看大家怎么看。
一、问题:缓存放哪?
传统的论坛系统,缓存一般只有一层:
- 服务器缓存:数据存服务器(文件 / Redis / Memcached),所有用户共享,首次访问快,二次访问更快。
但服务器缓存有个天然瓶颈:每次页面渲染,都要从服务器读一次缓存。虽然比查数据库快,但还是要走网络,还是有延迟。
那能不能让用户浏览器也存一份缓存?
二、思路:双层缓存,各司其职
第一层:用户浏览器缓存(localStorage)
把变化慢的数据(版块列表、插件列表、热门标签、友情链接)存在用户浏览器里。用户二次访问时,直接从本地读取,零网络请求,毫秒级加载。
第二层:服务器缓存(托底)
如果用户浏览器没…