文对强缓存和弱缓存进行讲解:
为了展示强缓存和弱缓存
第一步:Ctrl + shift + delete将缓存给清除
将浏览器的数据给清空一下
这里的数据大小是83.4kB
在响应头里面,会存在着ETag和Last-Modified资料
第一请求和第二请求,这里多了一个If-Modified,在弱缓存当中,从缓存中获取数据,检验匹配是经过多次匹配,出现304指令,
200或者304指令意味着没有发生变化
如果是强缓存这里根本不会产生数据,强缓存的特性是存储在用户的本地
浏览器缓存相关指令
expires指令
expires:该指令用来控制页面缓存的作用。可以通过该指令控制HTTP应 答中的“Expires"和”Cache-Control"
expires 有两种语法,一种是time,time是时间值,它默认是以秒来计数的
no-cache,无论缓存有没有过期,都需要发送请求,检验缓存有没有过期
max-age与expires的意思差不多,只不过有的没有这个配置,
epoch会指定1970的时间,max是2037年的时间
具体配置流程:
vim ngnix.conf
为了方便对比,先将请求头信息进行复制
之后在conf配置文件下配置
location ~ .*\.(html|js|css|png) $ {
}
以html和js和css等结尾的资源,都走这个
写成expiress 1000;的意思是缓存1000s
检验语法,重新加载
重新对jQuery.js中进行查看
现在相应头多了一块时间max-age=1000秒和Expires:Mon.27(Expires的意思是服务器的时间)
如果将配置expiress修改为-1000,改为了负数,在请求头中出现了no-cache
如果将该值指定为max
它会出现一些时间,默认是以秒来分割的
这个max的值是10年的意思,意思是最大的缓存时间可以已达到10年
add_header指令
add_header指令是用来添加指定的响应头和响应值。
语法 add_header name value [always];
位置存储在http、server、location..
如果想要到web服务器直接获取,不缓存,用no-store
不缓存的写法配置,在配置文件中添加add_header Cache-Control no-store
现在就实现了弱缓存,第一次访问了304kb数据,第二次就是83.5kb,实现了弱缓存了
学Web前端要会哪些技能?浏览器缓存是怎么回事?缓存是现在系统中必不可少的模块,是高并发高性能架构的一个关键组件。缓存适用于对数据实时性要求不高以及对性能要求高的场景中,可以有效地提升性能,缓解数据压力。对于Web前端开发者来说,主要跟浏览器中的缓存打交道,接下来小编就给大家讲解一下浏览器缓存机制。
什么是浏览器缓存?
浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如:Expires、Cache-control等)。但是也有非HTTP协议定义的缓存机制,如使用HTML Meta标签,Web开发者可以在HTML页面的节点中加入标签,代码如下:
上述代码的作用是告诉浏览器当前页面不被缓存,每次访问都需要去服务器拉取。使用上很简单,但只有部分浏览器可以支持,而且所有缓存代理服务器都不支持,因为代理不解析HTML内容本身,而广泛应用的还是HTTP头信息来控制缓存。
浏览器对于所请求资源的缓存处理有一套完整的机制,主要包含三个策略:存储策略、过期策略、协商策略。存储策略发生在收到请求响应后,用于决定是否缓存相应资源;过期策略发生在请求前,用于判断缓存是否过期;协商策略发生在请求中,用于判断缓存资源是否更新。
缓存又分为强缓存和弱缓存(又称为协商缓存)。其中强缓存包括Expires和Cache-Control,主要是在过期策略生效时应用的缓存。弱缓存包括Last-Modified和ETag,是在协商策略后应用的缓存。强弱缓存之间的主要区别在于获取资源时是否会发送请求。
浏览器下访问资源的方式主要有7种:
(新标签)地址栏回车
链接跳转
前进、后退
从收藏栏打开链接
(window.open)新开窗口
刷新(Command + R / F5)
强制刷新(Command + Shift + R / Ctrl + F5)
使用这7种方式访问资源时,应用缓存的策略会有一些不同。需要注意的是,除此之外,还有一种特殊情况。即在当前地址栏,不改变内容,直接回车,等同于刷新当前页。但是在当前页点击跳转到自身,和链接跳转一致,并不会等同于刷新。
如果想学习Web前端技术,一定要多了解一些行情。如果你没有什么基础,可以选择专业的专业,深入学校好好考察,才能更客观地了解其中的实质。
态资源上线问题。
有学员出去面试,面试官问了一个问题:如果你真的没有做过前端的资源的上线发布,还真的不好回答。
正常前端要上线的时候,打完包之后会生成一个dist的文件夹,dist文件夹里面会扔到服务器上。这时候上完线之后,比如去请求页面的时候,基本上有js,对于用户来说,这时候有新的东西要更新。
可以看一下,有些资源是走的缓存的,比如js资源,包括图片资源,看走的缓存。所以对用户来说,如果不去强制刷新页面,不清缓存,访问其实还是旧的业务逻辑。
打完包之后会有一个index.html,但是这里面的东西通常index.html文件本身很少去做缓存的,所以它里面index.html去上线,上完线之后放到静态服务器上,就是它。上完之后,这里面外链的js是这个版本的。
比如这次更新完了之后要上线,有可能js变了,后缀名也变了,这时候要去上线。要去上线之后,用户访问网页的时候,加载的index.html里面还是旧的js文件。对于旧的js文件来说,有可能对于远端的复习上把旧的文件删掉了,还有可能会导致前面出错,因为请求不了js了。
因为上完线之后,js已经删掉了。这时候一般的方案就是要不就是index.html不做缓存,每次都请求最新的。像首页没有缓存,每次刷新页面都是请求新的,看到没有?但这种方式不是特别好。
这种方式怎么做?一般在index.html里面可以加上这样的请求头,加上标签,就是强制不让它缓存。再一个就是服务是部署在nginx,在nginx里面也可以加上不让它缓存。但是这种方法还不是最好的。
一般不管是js这种资源,还是图片,CSS还是index.html,基本上都会做缓存的。
比如静态资源,index.html还是图片,都会上到cdn服务上,每一次发包的时候,它会把原来的上一个版本的静态资源留着,也不会去删除。像会做一个备份,根据日期做一个备份。
对于用户来说,这个网站如果用户没有清缓存,访问index.html,那么它里面那种东西还是旧的内容,js文件名也是旧的,但是在这个服务器上,我给它保留备份。
如果这时候用户清缓存,或者打包之后,index.html的过期时间已经到了,过期时间到了,它会去请求新的,请求新的就去请求新的js文件,也就是在上线的时候,旧的静态资源,比如在这个里面的js,都会做备份的。
但是这样也有一个弊端,备份的内容会非常多,从二零二年的到现在的二零二四年了,都还在备份当中,因为不知道用户什么时候去刷新页面,有可能访问的是旧的,一般都设置缓存时间的,index.html可能缓存个30天。
如果面试官在问你的时候,可以以这种方式给面试官聊。
*请认真填写需求信息,我们会在24小时内与您取得联系。