本篇介绍HTML5支持的Web存储(Web Storage)和HTML 5 应用程序缓存。javascript
HTML5 提供了两种在客户端存储数据的新方法:css
sessionStorage存储的数据只有在同一个会话中的页面才能访问而且当会话结束后数据也随之销毁。所以sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。html
localStorage用于持久化的本地存储,除非主动删除数据,不然数据是永远不会过时的。html5
之前的客户端存储数据都是由cookie完成的,它存在问题是:Cookie的大小是受限的,而且每次请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽;另外cookie还须要指定做用域,不能够跨域调用。可是Cookie也是不能够或缺的:Cookie的做用是与服务器进行交互,做为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。java
localStorage 和 sessionStorage 拥有同样的存取接口,下边已sessionStorage为例说明web
接口
sessionStorage.getItem(key) ---- 获取指定key的本地存储的值
sessionStorage.setItem(key,value) ---- 将value存储到key字段中
sessionStorage.removeItem(key) ---- 删除指定ke的本地存储的值
sessionStorage.length ---- sessionStorage的项目数
sessionStorage.clear() ---- 清空sessionStorage的项目跨域
web Storage不但能够用自身的setItem,getItem等方便存取,也能够像普通对象同样用点(.)操做符,及[]的方式进行数据存储,像以下的代码:浏览器
var storage = window.localStorage;
storage.key1 = "hello";
storage["key2"] = "world";
console.log(storage.key1);
console.log(storage["key2"]);
sessionStorage和localStorage提供的key()和length能够方便的实现存储的数据遍历,例以下面的代码:缓存
var storage = window.localStorage; for (var i=0, len = storage.length; i < len; i++){ var key = storage.key(i); var value = storage.getItem(key); console.log(key + "=" + value); }
<!DOCTYPE HTML> <html> <body> <script type="text/javascript"> if (localStorage.pagecount) { localStorage.pagecount=Number(localStorage.pagecount) +1; } else { localStorage.pagecount=1; } document.write("Visits: " + localStorage.pagecount + " time(s)."); </script> <p>刷新页面会看到计数器在增加。</p> <p>请关闭浏览器窗口,而后再试一次,计数器会继续计数。</p> </body> </html>
该示例使用localStorage,实现页面浏览次数计数的功能,没刷新一次页面便可完成一次计数,关闭标签页或浏览器以后从新打开,仍然能够连续计数(只限当前机器,和asp.net的application对象是不一样的,一个是客户端存储,一个服务端存储)。该示例若将localStorage替换成sessionStorage则能够统计某一个用户在当前回话中访问(刷新)页面的次数(同源页面是能够共享sessionStorage的)。服务器
使用 HTML5,经过建立 cache manifest 文件,能够轻松地建立 web 应用的离线版本。
HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网链接时进行访问。
应用程序缓存为应用带来三个优点:
一、如需启用应用程序缓存,请在文档的 <html> 标签中包含 manifest 属性
二、manifest 文件须要配置正确的 MIME-type,即 "text/cache-manifest"。必须在 web 服务器上进行配置。
三、建立manifest文件(如manifestDemo.appcache),manifest 文件的建议的文件扩展名是:".appcache"。
manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。对于浏览器来讲,manifest的加载是要晚于其余资源的,这就致使check manifest的过程是滞后的,发现manifest改变,全部浏览器的实现都是紧随着作静默更新资源,以保证下次浏览时应用到更新。另外引入manifest的页面,即便没有被列入缓存清单中,仍然会被用户代理缓存。
CACHE MANIFEST
# VERSION 0.3
# 直接缓存的文件
CACHE:
/theme.css
/logo.gif
/main.js
# 在线连接的文件
NETWORK:
login.asp
# 替代方案
FALLBACK:
/html5/ /404.html
manifest 文件可分为三个部分:
manifest文件中第一行 CACHE MANIFEST是必须的。
CACHE 下定义的资源在网络断开的状况下仍然可用。资源列表必须是一行对应一个资源。
而NETWORK下定义的则须要联网访问。在定义了CACHE以后,可使用'*'号定义NETWORK,即排除显式定义的缓存列表外其余资源都不缓存。
FALLBACK则是一种替代方案,前边的路径(文件夹或者路径)访问失败时使用后边的替补页展现。
重要的提示:以 "#" 开头的是注释行,但也可知足其余用途。应用的缓存会在其 manifest 文件更改时被更新。若是您编辑了一幅图片,或者修改了一个 JavaScript 函数,这些改变都不会被从新缓存。更新注释行中的日期和版本号是一种使浏览器从新缓存文件的办法。
一旦应用被缓存,它就会保持缓存直到发生下列状况:
LZ在查看这节内容时,搜索到其余不少manifest的相关内容和存在问题,将链接放在这里供园友查看。
关于HTML5客户端存储的知识相对要简要一些。缓存相关内容,LZ仅仅是在w3school上运行了一下范例,网上搜集了一些其余相关信息,由于缺少离线环境,本身没有动手实践。好吧,写这么一点东西居然用了两个半小时。。。今天就到这里吧。