缓存是什么
前端开发过程中大多数的数据都是需要从后端请求的,而向后端请求数据是需要请求时间的,如果每次进入页面都需要请求一次数据,这样启动性能和用户体验就会较差,有什么办法可以降低数据请求的次数呢,那就是缓存,对于数据我们可以在服务端进行CDN缓存,在http请求过程中使用http缓存,也可以在终端(浏览器端)使用浏览器缓存,这篇主要整理下浏览器缓存的知识
浏览器对于请求数据缓存
为支持http的协商缓存以及启动性能和资源消耗等,浏览器会自动将一些东西进行存储
它存储在哪,有什么特点呢
存储方式
浏览器缓存分为两种:
memory cache
memory cache,顾名思义,是将数据缓存到内存中,我理解类似于sessionstorage
一般来说,脚本、字体、图片等资源浏览器会放置于memory cache中
disk cache
disk cache,会将数据缓存到磁盘中,类似于local Storage的概念
一般来说css等不需要实时变更的资源会放入disk cache
memory cache 和 disk cache 的利弊
一般来说memory cache关闭浏览器后就没了,好处在于加载速度快 disk cache 放在磁盘中,使用的时候就需要再取一遍,做一次额外的IO,加载时间较慢于memory cache
浏览器提供给前端的缓存
localStorage、sessionStorage、cookie是前端数据缓存使用最多的三个浏览器缓存,可以将数据缓存于浏览器中
1、localStorage
local Storage与sessionStorage类似,不过localStorage存储时间更久
存储位置: devtools 下 application -> Storage -> local Storage 中
特点:
1. 无时间限制,除非手动删除,否则一直存在
2. 大小限制为一个域名5M
sessionStorage
类比local Storage,session Storage相当于暂时存储
特点: 只存在于当前窗口,窗口关闭或刷新即失效
存储位置: devtools 下 application -> Storage -> session Storage 中
cookie
cookie一般是服务端下发的数据,浏览器根据set-cookie 的响应头,将数据存储于cookie中
存储位置: devtools 下 application -> Storage -> cookies
特点:
浏览器请求的时候会带在请求头中
大小限制4kb
可设置失效时间
数量限制:
Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie。
Firefox每个域名cookie限制为50个。
Opera每个域名cookie限制为30个。
Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。
localstorage 等存储超出限制会怎样
会存储不进去并报错
warning localStorage 等会根据域名进行限制,有没有总的限制,http和https算一个域吗
http 和 https 都会跨域啊 怎么会是一个域 我真笨
总量的限制还没查到