[TOC]
## 前言
web存储对于优化体验,保存用户数据具有重要的作用。本教程所指的web存储是指广义的。而存储本身是为了加快下一次的访问速度以及避免一些数据请求。
## http缓存
### 新鲜度
新鲜度,有时候我们也称为ttl(生存时间)。最简单的方式就是使用报头,缓存代理会被告知该资源保留多长时间。我们可以使用expire报头,一般的静态网站,我们都会建议比较长的时间。
这样做的目的是所谓的静态资源,比如css和js,如果可以的话,不用再次获取。
### 验证
验证为缓存代理提供了一种无须请求完整资源就能确定旧的缓存是否可用的方法。浏览器可以发出一个包含if-modified-since的报头请求,如果服务器上的资源没有发生改变,就会返回304 not modified的响应,这样浏览器就会使用缓存中已经存在的文件,而不是重新获取。
另一个验证功能是etag,是一种唯一的标识符,一般通过哈希算出,只需要简短的字符,能在没有日期信息的情况下验证缓存是否与服务器文件相符合,请求代理会创建一个带有附加条件的请求,并加入if-modified-since,它包含etag.如果服务器的内容包含etag与客户端的匹配,那么会返回304。
验证缓存需要在服务端与客户端进行一个往返,虽然比下载文件好,但是可以的话,还是设置文档有效期更好,避免请求,浏览器也不会去验证
### 失效
某些操作执行后会导致缓存项失效,最常见的就是创建相同url的非get请求。
### 正常的缓存行为
如果没有写报头,什么都没做情况下,大多数浏览器有一个最大缓存大小,当缓存达到这个大小的时候,就会从缓存中删除最近使用较少的项目。假设不考虑缓存报头,浏览器可能缓存你完全不想保存的内容。
## 为移动优化
* 移动端ios浏览器在你关闭浏览器或者关掉进程的时候,缓存可能就被清掉,而安卓浏览器一共的缓存只有2.5m,所以这种情况下,设置头信息更为重要。
## webStorage
### 特性
除了cookie之外,为我们提供了另一种持久化数据的存储方式,与cookie不用,网络存储为每个域提供了5m的键值对的存储空间,在ios上使用utf-16的,每个字符需要两倍多的字节,所以ios实际存储量为2.5m.
* 具体语法以及介绍参考:[h5websSroage教程](http://www.kancloud.cn/eagles/codingrules/315244)
## 应用缓存
- 前端入门
- 前端入职须知
- 前端自我定位
- pc与手机页面差别
- 前端书单
- 前端种子计划
- 前端技术栈
- ps
- ps入门阶段
- html
- html入门
- html代码规范
- meta
- table
- iframe
- a标签详解
- image
- html代码审查工具
- h5专题
- h5入门
- h5新增属性
- canvas画布教程
- audio/video
- Geolocation
- Websockets
- Web storage
- Communication
- Web Workers
- requestAnimationFrame
- css
- css入门必学
- css代码规范
- 项目字体规范
- css基本位置布局
- css常见样式命名规则
- css代码优化建议
- css常用样式名
- css选择器攻略
- css盒子模型的理解
- css属性继承与默认值
- css代码审查工具
- css中常见的知识盲区
- css3新特性浅谈
- css新特性了解
- border-radius
- background
- transform
- animation
- white-space
- css常用技术
- 文本两端对齐
- css之浮动解决方案
- css优化建议
- 文本超出省略
- img-sprites
- rem布局教程
- 水平居中&垂直居中
- 固宽&变宽布局
- 宽高固定比例的盒模型
- 样式预处理语言
- less教程
- sass教程
- postcss教程
- js
- javascript入门
- js代码规范
- js基础拓展
- js代码审查工具
- js性能优化
- js基本语句
- 基本运算
- 基本语句语法
- js对象
- es6入门
- obj
- Array
- Date
- String
- Boolean
- Number
- Json
- RegExp
- Math
- function
- jquery入门
- jq核心思想
- jq基本语法
- jq插件库汇总
- js常用技术
- break&continue区别
- js对日期转换
- js控制运动-move.js
- 原生js-cookie语法
- ajax请求后回调
- 表单数据序列化
- zepto
- zepto入门
- 百度touchjs
- js编程
- 插件库
- 功能性插件
- pdfjs
- wdatepicker
- qrcoder
- barcode插件
- photoviewer
- hammer.js
- echarts
- 交互组件
- layerjs
- java
- java入门
- java基本语句
- springMVC
- javaweb
- vm模板引擎
- freemarker
- maven教程
- mySql教程
- flex教程
- flex入门
- git教程
- git入门
- git分支
- git-tag管理
- git注意事项
- git-torise入门
- ide-git插件使用
- web
- web兼容
- web兼容思想
- pc端兼容适配文档
- pc端兼容bug汇总
- ie兼容bug汇总
- 手机兼容bug汇总
- web安全
- jeecms
- web存储
- app/h5组件
- 安卓教程
- ios教程
- 前端教程
- rubikx的教程
- 其他
- artTemplate
- tmod使用
- 跨域问题
- markdown教程
- 常用工具
- postman-api调试
- web常识
- 浏览器ua统计
- ui框架
- easyui
- bootstrap
- 入门推荐
- weui
- sui-pc
- sui-mobile
- layerUi