HTML5存储

204 阅读3分钟

HTML5存储

- H5之前如何实现存储

image.png 一共总结四种

第一种、cache俗称缓存(从磁盘或者DB拿出的数据)放到缓存中,可以减少一个磁盘的IO (Input和Output的缩写)也是存在内存中

第二种、磁盘文件:一般把一些图片文件或者是视频存放到磁盘上

第三种、数据库

第四种、内存:频繁使用数据,把要使用的数据存放到内存中,这样调用的话可以增加读取的效率

H5之前

cookies诞生

特点:

  1. http请求头上会带着
  2. 大小 4K
  3. 主Domain污染(存放的域名都放在域名下,这样请求时子域名会携带主域名在http请求头中,这样会造成安全性问题)

UserDate

  • 只有IE支持
  • XML文件

H5的存储目标

  • 解决4K的大小问题
  • 解决请求头常带有存储信息的问题
  • 解决关系型存储的问题
  • 跨浏览器

- H5的集中常见的存储方式

本地存储( localStorage && sessionStorage)

存储形式:-key-->value

过期
--localStorage 永久存储,永不失效,除非手动删除
--sessionStorage 当前会话或者浏览器关闭自动删除
大小 --5M

image.png localStorage API介绍

-getItem 获取localStorage
-setItem 设置localStorage
-removeItem 移除localStorage
-key 取特定位置
-clear 全部清除
    localStorage.setItem('test1','test1')
    localStorage.getItem('test1') "test1"
    localStorage.key(0) 
    localStorage.key(1) --"test1"
    lcoalStorage.clear()

都可以存储什么数据呢?

数组、json数据、图片、脚本、样式文件

使用注意事项

  1. 使用前要判断浏览器是否支持
  2. 写数据时候,需要异常处理,避免超出容量抛错
  3. 避免把敏感的信息存入localstorage
  4. key的唯一性 使用限制
  5. 存储更新策略,过期控制
  6. 子域名之间不能共享存储数据postmessage
  7. 超出存储大小之后如何存储(LRU,FIFO)
  8. server端如何取到 localStorage过期控制
Storage.prototype.setExpire = (key, value, expire) =>
{ 
let obj = { data: value, time: Date.now(), expire: expire }; //localStorage 设置的值不能为对象,转为json字符串 localStorage.setItem(key, JSON.stringify(obj)); }
Storage.prototype.getExpire = key => { 
let val = localStorage.getItem(key); 
if (!val) 
   { return val; } 
val = JSON.parse(val);
if (Date.now() - val.time > val.expire)
{ 
   localStorage.removeItem(key); return null; 
} 
return val.data; 
}

使用场景:

  1. 利用本地数据,减少网络传输
  2. 弱网络环境下,高延迟,低带宽,尽量把数据本地化

image.png

离线存储(application cache)

定义:它可以让Web应用在离线的情况下继续使用,通过manifest文件知名需要缓存的资源

检测是否在线

   navigator.onLine //boolean类型
 

原理

image.png

优势
  1. 完全离线
  2. 资源被缓存,加载更快
  3. 降低server负载
缺陷
  1. 含有mainifest属性的当前请求页无论如何都会被缓存
  2. 更新需要建立在manifest文件的更新,文件更新后是需要页面再次刷新的(需要2次刷新才能获取新资源)
  3. 更新市全局性的,无法单独更新某个文件(无法单点更新)
  4. 对于链接的参数变化是敏感的,任何一个参数的修改都会被(master)重新缓存(重复缓存含参页面)index.html和index.html?renew=1会被认为是不同文件,分别缓存
适用场景
  1. 单地址的页面

  2. 对实时性要求不高的业务

  3. 离线webapp

  4. IndexDB和WebSQL

  5. 定义:一种能在浏览器中持久的存储结构化数据的数据库,并且为web应用提供了丰富的查询能力

  6. 浏览器支持

  7. chrome 11+、

  8. opera 不支持

  9. firefox 4+

  10. IE 10+

image.png

image.png