百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>html5教程> html5离线存储和cookie贮存剖析-
分享文章到:

html5离线存储和cookie贮存剖析-

发布时间:08/01 来源:未知 浏览: 关键词:
在HTML5之前我们会运用cookie,在阅读器端缓存一些数据,例如:登录取户信息,历史搜寻信息等等。但是cookie所支撑的容量仅仅只要4k,也没有专门的api来操纵,只能依赖一些开源的库,这里运用cookies.js存储和猎取cookie信息。 什么是Cookies(“小甜饼”)呢?简略来说,Cookies就是办事器暂寄存在你的电脑里的材料(.txt格局的文本文件),好让办事器用来识别你的盘算机。当你在阅读网站的时候,Web办事器会先送一小小材料放在你的盘算机上,Cookies 会帮你在网站上所打的文字或是一些选中都记载下来。当下次你再拜访统一个网站,Web办事器会先看看有没有它上次留下的Cookies材料,有的话,就会根据Cookie里的内容来推断运用者,送出特定的网页内容给你。在HTML5之前我们会运用 cookie,在阅读器端缓存一些数据,例如:登录取户信息,历史搜寻信息等等。但是cookie所支撑的容量仅仅只要 4k ,也没有专门的api来操纵,只能依赖一些开源的库, 这里运用 cookies.js 存储和猎取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离线存储的剖析,大家都理解了吗?

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板