local storage、session storage、cookie知识整理

250 阅读3分钟

缓存是什么

前端开发过程中大多数的数据都是需要从后端请求的,而向后端请求数据是需要请求时间的,如果每次进入页面都需要请求一次数据,这样启动性能和用户体验就会较差,有什么办法可以降低数据请求的次数呢,那就是缓存,对于数据我们可以在服务端进行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 都会跨域啊 怎么会是一个域 我真笨
总量的限制还没查到