北大青鸟java培训:什么是浏览器缓存?

Python020

北大青鸟java培训:什么是浏览器缓存?,第1张

什么是浏览器缓存浏览器缓存(BrowerCaching)是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档。

浏览器缓存的优点有:减少了冗余的数据传输,节省了网费减少了服务器的负担,大大提升了网站的性能加快了客户端加载网页的速度在前端开发面试中,浏览器缓存是web性能优化面试题中很重要的一个知识点,从而说明浏览器缓存是提升web性能的一大利器,但是浏览器缓存如果使用不当,也会产生很多问题,正所谓是,想说爱你,并不是很容易的事。

所以,结合最近遇到的案例,本文对浏览器缓存相关的知识进行总结归纳,希望对读者有所帮助。

浏览器缓存的分类浏览器缓存主要有两类:缓存协商和彻底缓存,也有称之为协商缓存和强缓存。

浏览器在第一次请求发生后,再次请求时:浏览器会先获取该资源缓存的header信息,根据其中的expires和cahe-control判断是否命中强缓存,若命中则直接从缓存中获取资源,包括缓存的header信息,本次请求不会与服务器进行通信如果没有命中强缓存,浏览器会发送请求到服务器,该请求会携带第一次请求返回的有关缓存的header字段信息(Last-Modified/IF-Modified-Since、Etag/IF-None-Match),由服务器根据请求中的相关header信息来对比结果是否命中协商缓存,若命中,则服务器返回新的响应header信息更新缓存中的对应header信息,但是并不返回资源内容,它会告知浏览器可以直接从缓存获取否则返回最新的资源内容强缓存强缓存是利用http的返回头中的Expires或者Cache-Control两个字段来控制的,用来表示资源的缓存时间

Expires该字段是http1.0时的规范,它的值为一个绝对时间的GMT格式的时间字符串,比如Expires:Mon,18Oct206623:59:59GMT。

这个时间代表着这个资源的失效时间,在此时间之前,山东电脑培训建议即命中缓存。

这种方式有一个明显的缺点,由于失效时间是一个绝对时间,所以当服务器与客户端时间偏差较大时,就会导致缓存混乱。

function cache_none($interval = 60) \x0d\x0a{ \x0d\x0a // 向后兼容HTTP/1.0 \x0d\x0a header("Expires: 0") \x0d\x0a header("Pragma: no-cache") \x0d\x0a // 支持HTTP/1.1 \x0d\x0a header("Cache-Control: no-cache,no-store,max-age=0,s-maxage=0,must-revalidate") \x0d\x0a} \x0d\x0a当调用session_start()时,PHP会自动发送一个no-cache类的头来阻止缓存数据,\x0d\x0a要注意的是:\x0d\x0a通过POST方法发送的请求不能以如上所述的方式缓存。

缓存功能的存在,让我们在浏览网页和访问防止的时候可以更快的加载我们需要的内容,而今天北大青鸟http://www.kmbdqn.cn/就通过案例分析来了解一下,浏览器的缓存功能在使用上都有哪些类型。

1.ServiceWorkerServiceWorker是运行在浏览器背后的独立线程,一般可以用来实现缓存功能。

使用ServiceWorker的话,传输协议必须为HTTPS。

因为ServiceWorker中涉及到请求拦截,所以必须使用HTTPS协议来保障安全。

ServiceWorker的缓存与浏览器其他内建的缓存机制不同,它可以让我们自由控制缓存哪些文件、如何匹配缓存、如何读取缓存,并且缓存是持续性的。

ServiceWorker实现缓存功能一般分为三个步骤:先需要先注册ServiceWorker,然后监听到install事件以后就可以缓存需要的文件,那么在下次用户访问的时候就可以通过拦截请求的方式查询是否存在缓存,存在缓存的话就可以直接读取缓存文件,否则就去请求数据。

当ServiceWorker没有命中缓存的时候,我们需要去调用fetch函数获取数据。

也就是说,如果我们没有在ServiceWorker命中缓存的话,会根据缓存查找优先级去查找数据。

但是不管我们是从MemoryCache中还是从网络请求中获取的数据,浏览器都会显示我们是从ServiceWorker中获取的内容。

2.MemoryCacheMemoryCache也就是内存中的缓存,主要包含的是当前中页面中已经抓取到的资源,例如页面上已经下载的样式、脚本、图片等。

读取内存中的数据肯定比磁盘快,内存缓存虽然读取高效,可是缓存持续性很短,会随着进程的释放而释放。

一旦我们关闭Tab页面,内存中的缓存也就被释放了。

那么既然内存缓存这么高效,我们是不是能让数据都存放在内存中呢?这是不可能的。

计算机中的内存一定比硬盘容量小得多,操作系统需要精打细算内存的使用,所以能让我们使用的内存必然不多。