9.js-web-API-存储
2017-08-26 本文已影响65人
飞菲fly
1.请描述一下cookie,sessionStorage 和 localStorage 的区别
区别 | 容量 | 是否携带到ajax中 | API易用性 |
---|---|---|---|
cookie | 4k | 是 | 需要自己封装,麻烦 |
sessionStorage | 5M | 否(只作为存储来用) | getItem setItem |
localStorage | 5M | 否(只作为存储来用) | getItem setItem |
1.html5出来之前到html5一个标准的过渡,html5没出来之前cookie是最为本地存储的一个方法;
2.html5出来之后有sessionStorage 和localStorage这两个api可以作为本地存储。
3.ie低版本的淘汰,多少年还没有淘汰干净,cookie本地存储的功能还会一直存在,只不过比例越来越小了;sessonStorage 和localStorage本地存储的功能慢慢应用到各个新的地方,慢慢的把cookie取代。
(cookie不是sessionStorage和localStorage被取代就没了,本身还有另外的功能)
Cookie
1.本身用于客户端和服务器端通信
2.但是它有本地存储的功能,于是就被“借用”**
--html5出来之后虽然有sessionStorage和localStorage这种新的api,但是cookie本身的功能是不会变的,cookie一直会有,一直会作为客户端和服务器端通信的一种方式。它有本地存储的能力,但是有没有其 他方式能做的多,只好被借用。
3.使用document.cookie = ...获取和修改即可**
--用的时候比较麻烦,因为cookie就是一个字符串,在本地存储的时候,你得是key-value对象的形式存储,不能光存一个信息。
所有的服务器端的请求(发ajax,请求一个页面,一个js、css文件、一个图片),都会把cookie带进去,所有它是一个客户端和服务器端通信的一个工具,一个协议,一个条款,但是它又有本地存储的能力。
*cookie用于存储的缺点:(可设置失效时间,默认是关闭浏览器后失效)
1.存储量太小,只有4KB;
(因为它要携带到请求中去和服务器端通信,每次请求3-5M,不说慢,如果手机用流量很快就没了)
2.所有http请求都带着,会影响获取资源的效率;
(如果太多每次请求都带着,会效率很低)
3.API简单,需要封装才能用 document.cookie =...;
(作为存储来说,不可能只存一个东西,如果用户名存什么,密码存什么(密码加密)),如果本地存储当中的应用,比如存个城市名,性别是什么,姓名是什么这些,你要存好多好多的数据,怎么通过一个字符串解决呢,需要拆解封装的,所以cookie用起来特别麻烦)
localStorage 和 sessionStorage:
1.html5专门为存储而设计,最大容量5M
不用在请求中带着,请求中该带不会带多,cookie本来就带着,这个功能还是必须要用,但是作为cookie执行存储过程,单拎出来,然后用localStorage和sessionStorage来代替,这个时候可以做到很大,5M前端的量暂存来说,基本够了)
2.API简单易用:(不用自己定义、封装)
localStorage.setIntem(key,value);
localStorage.getItem(key);
3.区别:
1.都是可以在浏览器中存储到本地的,sessionStorage 如果浏览器关了,会话结束,它就会清理;用这个的场景少;
2.localStorage 只要存上了,不手动清,就会一直在,不用清;用这个的场景多一些;
--要存储到本地,记录下来,要缓存一些东西,下次在用的时候,直接拿就可以了,不用重新获取一遍。
在iOS safari隐藏模式下:
localStorage.getItem 会报错,建议统一使用try-catch封装起来