如何用缓存(Cache)进行前端性能优化?
2023-03-20 15:27:21 时间
一、缓存是什么?
缓存是一种保存资源副本并在下次请求时直接使用该副本的技术,可减少等待时间和网络流量,显著提升网站性能。
1、常见缓存
- 私有缓存:只能用于单独用户,譬如浏览器缓存;
- 共享缓存:能被多个用户使用,譬如代理服务器缓存;
2、什么资源会被缓存?
- 用 HTTP 协议 GET 方法请求的资源默认都会被缓存,譬如html文档、图片、文件等;
- 服务器响应中,包含 Cache-Control 头的资源,根据具体指令确定是否要缓存。
3、查看资源的缓存情况?
- 用 chrome 打开网站;
- 打开开发者工具(windows快捷键
Control+Shift+J
、Mac快捷键Command+Option+J
); - 下图中的
disk cache
和memory cache
都是使用了缓存; - 不要勾选
Disable cache
,勾选意味着禁用缓存功能。
4、查看服务器对缓存的配置?
下图列出服务器返回的资源,只需要点击其中一行,即可显示资源请求和响应的详细信息,图中 Cache-Control
就是服务器对此资源的缓存配置。
二、缓存更新
1、触发缓存的验证请求
资源被更新了,浏览器也必须重新获取资源,才能显示最新版本的网站。下面几种情况都会触发验证请求,如果资源更新了,服务器返回最新资源给客户端,否则客户端继续使用缓存显示页面。
- 点击浏览器的刷新按钮,需要验证;
- 当前时间 大于 响应头 Expires 的时间,需要验证;
- 缓存再本地保存时长 超过 Cache-Control 中 max-age 、s-maxage 的时长,需要验证;
- Cache-Control 被设置为 no-cache,需要验证;
2、缓存验证的过程?
缓存的本地时长超过 Cache-Control 中 max-age 设定的时长时,需要进行缓存验证,图中的验证结果是 304(Not Modified),表示缓存没有改动,无需更新,可继续使用。
3、缓存验证请求中的头信息
缓存的具体信息(资源id,修改时间等)都在请求头中,服务器对比下这些信息,即可知道缓存是否需要更新。常见的缓存验证的请求头组合:
- ETag + If-Match;ETag + If-None-Match;
ETag 是资源的唯一标识,可以快速确定是否需要返回最新资源给请求方。
- Last-Modified + If-Modified-Since;Last-Modified + If-Unmodified-Since;
这两种是根据时间来确定缓存是否需要更新,通常使用在没有 ETag 的情况。
三、相关 HTTP头
说明
1、Cache-Control
Cache-Control 是 HTTP 协议的请求头和响应头,用于实现缓存功能。单个请求可包含多个指令,用逗号隔开,指令不区分大小写但建议小写。详细用法,看这里!
2、Vary
Vary 是 HTTP 协议的其中一个响应头,代理服务器用它来判断是否存在共享缓存来响应客户,没有就向源服务器发新请求来响应用户。详细用法,看这里!
3、其他相关头
- ETag :资源的唯一标识符,用于确定缓存资源是否是最新的?
- If-Match、If-None-Match :用作确定资源
存在或不存在
?; - Last-Modified :表示资源的最后修改时间;
- If-Modified-Since、If-Unmodified-Since : 在给定时间之后,
有或没有
修改过? - 以上这些属性的详细说明,看这里!
四、Nginx 怎么使用缓存?
Nginx 作为代理服务器,开启缓存功能,可以减轻源服务器的压力,提升整个网站的性能。详情,看这里!
五、参考文档
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十