html5离线存储和cookie贮存剖析-
// 这是一个cookie值Cookies.set('key', 'value'); // 链式调取Cookies.set('key', 'value').set('hello', 'world'); // 可以额外设定一些参数Cookies.set('key', 'value', { domain: 'www.example.com', secure: true }); // 设定缓存工夫Cookies.set('key', 'value', { expires: 600 }); // Expires in 10 minutesCookies.set('key', 'value', { expires: '01/01/2012' }); Cookies.set('key', 'value', { expires: new Date(2012, 0, 1) }); Cookies.set('key', 'value', { expires: Infinity });// 猎取Cookies.get('key');
因而可知用cookie存储有一下几个缺陷:
存储数据的量比拼小
自身没有利便的api对其进行操纵
cookie信息会在http要求时参加到要求头中,既不平安也添加了带宽。
WEB Storage
HTML5 提拱更好的当地存储标准 localStorage 和 sessionStorage , 它们将数据存储在当地,并且在http要求时不会携带 Storage 里的信息, 运用方式也很简略:
localStorage.setItem('key', 'value'); localStorage.getItem('key'); localStorage.removeItem('key'); sessionStorage.setItem('key', 'value'); sessionStorage.getItem('key'); sessionStorage.removeItem('key');
sessionStorage 和 localStorage 运用方式及特性根本一致,独一的区别是, sessionStorage 只在会话内有效,当阅读器窗口关闭,sessionStorage 缓存的数据会主动被革除, 而 localStorage 只有不手动革除,它会永恒保留在当地。
这里有张图片剖析了 cookie 、 localStorage 、 sessionStorage 三者的区别
service work demo
《script》 navigator.serviceWorker.register("/service-worker.js").then(function(serviceWorker) { console.log("success!"); }); 《script》
在页面注册service-worker成功时就会调取这个js
this.oninstall = function(e) { var resources = new Cache(); var visited = new Cache(); // Fetch them. e.waitUntil(resources.add( "/index.html", "/fallback.html", "/css/base.css", "/js/app.js", "/img/logo.png" ).then(function() { // Add caches to the global caches. return Promise.all([ caches.set("v1", resources), caches.set("visited", visited) ]); })); };this.onfetch = function(e) { e.respondWith( // Check to see if request is found in cache caches.match(e.request).catch(function() { // It's not? Prime the cache and return the response. return caches.get("visited").then(function(visited) { return fetch(e.request).then(function(response) { visited.put(e.request, response); // Don't bother waiting, respond already. return response; }); }); }).catch(function() { // Connection is down? Simply fallback to a pre-cached page. return caches.match("/fallback.html"); }); ); };
service worker 采纳事件监听机制, 上面的代码监听了 install 和 fetch 事件,当 server worker 安装成功后,调取此办法,然后缓存页面的资源文件, fetch 页面要求事件, server worker 拦截到会员要求,当发明要求文件命中缓存则从缓存中取得文件,返回给页面,无需经过办事器,借此达到离线的目的。
固然 service worker 的功能远不止此刻这些
indexedDB
indexedDB 是一个用于当地存储数据的 nosql 数据库,具有极快的数据查询速度,并且可以直接保留js 对象。比拟web sql(sqlite)更加高效,包含索引、事务处置和强健的查询功能。indexedDB特色:
1.一个网站可能有一个或多个 IndexedDB 数据库,每个数据库必需拥有惟一的名称。
2.一个数据库可包括一个或多个对象存储
一个对象存储(由一个名称惟一标识)是一个记载汇合。每个记载有一个键 和一个值。该值是一个对象,可具有一个或多个属性。键可能基于某个键生成器,从一个键途径衍生出来,或者是显式设定。一个键生成器主动生成惟一的陆续正整数。键途径定义了键值的途径。它可以是单个 JavaScript 标识符或多个由句点分隔的标识符。
根本运用方式如下:
var openRequest = indexedDB.open("auto_people", 3);var db; //数据库对象openRequest.onupgradeneeded = function(e) { console.log("Running onupgradeeded..."); var thisDB = e.target.result; if(!thisDB.objectStoreNames.contains("people")){ thisDB.createObjectStore("people", {autoIncrement:true}); //创建一个store并设定主键自增长 } }//新建成功openRequest.onsuccess = function(e){ console.log("success!"); db = e.target.result; //Listen for add clicks} openRequest.onerror = function(e){ console.log("error!"); console.dir(e); }//这应当站在另外地方处置,这是做一个代码展现var transaction = db.transaction(['people'], "readwrite"); //新建一个连贯var store = transaction.objectStore("people"); //猎取storevar request = store.add({ name: 'myron', email: 'test@qq.com', created: new Date() }); //增加信息request.onerror = function(e){ alert('error!'); console.dir(e); } //当增加失败时调取request.onsuccess = function(e){ console.log('Did it!'); } //增加成功时调取request = store.get(1); //猎取首先条数据request.onsuccess = function(e) { var result = e.target.result; console.dir(result); if(result){ //拿到存储的对象 } }
以上内容就是cookie和HTML5离线存储的剖析,大家都理解了吗?