美文网首页让前端飞
前端性能优化5:缓存协议

前端性能优化5:缓存协议

作者: 前端辉羽 | 来源:发表于2020-07-10 18:51 被阅读0次

前面所讲的缓存都是我们前端手动操作的缓存,但是在大规模的项目中,手动缓存显得非常的麻烦,我们希望通过一些前后端协商好的策略 进行自动缓存


不同的缓存策略的文件加载所用的时间.png

HTPP Header中控制缓存的属性:
Cache-Control
既可以存在于request header中,也可以存在于reponse header中

  • max-age 有效时间,有效期内不会再进行请求
    max-age的优先级是高于expires的
  • s-maxage
    指定的是public的有效时间
  • private
  • public
  • no-cache
    会发请求到服务端,然后由服务端去判定浏览器当前的缓存有没有失效
  • no- store
    配置了这个属性,则代表完全不适用缓存策略

Expires
缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点
告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求
expires是http1.0的标准,当有1.1标准的max-age属性的时候,expires自动失效

Cache-Control和Expires豆属于强缓存,可以不经过服务端的同意,直接从客户端缓存拿数据。
但是服务端的文件的更新是无法去完全预料的。

Last-Modified / If-Modified-Since
基于客户端和服务端协商的缓存机制
Last-Modified ———— response header
If-Modified-Since ———— request
需要与cache-control共同使用

客户端在请求头中添加If-Modified-Since属性,属性值是一个时间,询问服务端此文件从属性值时间开始是否有更新,如果没有更新的话,服务端返回一个状态码304,告诉客户端可以直接使用缓存中的数据。
如果服务端发现文件已更新,就会把文件返回来的同时在返回头中添加上文件的最新更新时间Last-Modified属性,此时的状态码是200

但Last-Modified也有一些缺点
1.某些服务端不能获取精准的修改时间
2.文件修改时间改了,但是文件内容却没有变

接下来讲能够克服上述缺点的:

Etag / If-None-Match

文件内容的hash值
etag ———— response header
if-none-match ———— request header
需要与cache-control共同使用

不以更新时间为文件是否需要更新的依据,而是以hash值

分级缓存策略.png

缓存匹配流程

  • 1.浏览器发送请求前,根据请求头的expires和cache-control判断是否命中(包括是否过期)强缓存策略,如果命中,直接从缓存获取资源,并不会发送请求。如果没有命中,则进入下一步。
  • 2.没有命中强缓存规则,浏览器会发送请求,根据请求头的last-modified和etag判断是否命中协商缓存,如果命中,直接从缓存获取资源。如果没有命中,则进入下一步。
  1. 如果前两步都没有命中,则直接从服务端获取资源。


    image.png
from disk cache和from memory cache

Chrome的网络请求的Size会出现三种情况from disk cache(磁盘缓存)、from memory cache(内存缓存)、以及资源大小数值。

状态 类型 说明
200 form memory cache 不请求网络资源,资源在内存当中,一般脚本、字体、图片会存在内存当中
200 form disk ceche 不请求网络资源,在磁盘当中,一般非脚本会存在内存当中,如css等
200 资源大小数值 从服务器下载最新资源
304 报文大小 请求服务端发现资源没有更新,使用本地资源

浏览器读取缓存的顺序为memory –> disk。

访问网页的三种情况

  • 1.打开网页,地址栏输入地址: 查找 disk cache 中是否有匹配。如有则使用;如没有则发送网络请求。
  • 2.普通刷新 (F5):因为 TAB 并没有关闭,因此 memory cache 是可用的,会被优先使用(如果匹配的话)。其次才是 disk cache。
  • 3.强制刷新 (Ctrl + F5):浏览器不使用缓存,因此发送的请求头部均带有 Cache-control:no-cache(为了兼容,还带了 Pragma:no-cache),服务器直接返回 200 和最新内容。

服务端性能优化

vue渲染面临的问题是什么
下载vue.js
执行vuejs代码
生成html页面

以前没有前端框架的时候,用jsp/php在服务器端进行数据的填充,发送给客户端就是已经填充数据的html
使用jquery异步加载数据
使用react和vue等前端框架

怎么在vue这个层面对性能进行提升
多层次的优化方案
1.构建层模板编译
2.数据无关的prerender的方式
3.服务端渲染SSR

Vue的Server Side Rendering流程图.png

相关文章

  • 前端性能优化5:缓存协议

    前面所讲的缓存都是我们前端手动操作的缓存,但是在大规模的项目中,手动缓存显得非常的麻烦,我们希望通过一些前后端协商...

  • 常用的后端性能优化六种方式:缓存化+服务化+异步化等

    性能优化专题 前端性能优化 数据库性能优化 jvm和多线程优化 架构层面优化 缓存性能优化 常用的后端性能优化六大...

  • 前端性能优化(中)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(上)...

  • 前端性能优化(下)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(中)...

  • 前端性能优化指南

    前端性能优化指南 AJAX优化 缓存AJAX: 请求使用GET:当使用XMLHttpRequest时,而URL长度...

  • 漫谈Web缓存

    作者 | WilsonLiu95 背景说明 缓存一直是前端性能优化中,浓墨重彩的一笔。了解前端缓存是打造高性能网站...

  • 前端性能优化(上)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 为什么要进行前端性能...

  • 【前端性能优化指南】1 - 利用缓存减少远程请求

    更多前端性能优化系列请点击这里 >> 欢迎来到「前端性能优化之旅」的第一站 —— 缓存。 当浏览器想要获取远程的数...

  • js基础常见问题总结(三)~

    web前端性能优化总结 浏览器访问优化 1、减少http请求,合理设置 HTTP缓存2、使用浏览器缓存3、启用压缩...

  • 总结一些简单的前端性能优化

    前端性能优化大致分为以下几个点 网络加载类 页面渲染类 缓存类 图片类 脚本类 渲染类 架构协议类 分别以一句话简...

网友评论

    本文标题:前端性能优化5:缓存协议

    本文链接:https://www.haomeiwen.com/subject/pxyxqktx.html