Web Storage

     Web Storage 是一种简单的将JavaScript处理的数据永久保存的接口,它可以让我们不通过服务器进行数据的读写,可以很好的减少和服务器的通信,实现离线操作。

     特点:

     1、以键值对的形式存储

     2、能够以普通JavaScript对象的方式进行读写

    Web Storage提供了同源服务的共享内存,不同服务,只要源相同,就可以共享存储,大部分浏览器以5MB为上限,Web Storage 实体是全局对象中对已的localStorage和sessionStorage 两个对象,localStorage中保存的数据只要没被显式的删除,就不会丢失,sessionStorage保存数据仅在同一个会话中保留。


基本操作:

     1、数据的读写:

            可以通过setItem方法将数据存至localStorage中,并通过getItem方法引用数据,也可以通过相应的语法进行读取

            

//数据保存,以下3行等价
localStorage.setItem('foo','bar');
localStorage.foo='bar';
localStorage['foo']='bar';

//数据的引用,以下3行等价
var data= localStorage.getItem('foo');
var data= localStorage.foo;
var data= localStorage['foo']
       localStorage只能对字符串进行读写,若要存储对象,可以使用JSON.stringfy和JSON.parse方法,进行相关转换


      2、数据的删除:

       可以通过removeItem方法删除,也可以通过相应的语法进行删除。

     

//删除数据
localStorage.removeItem('foo');
delete localStorage.foo;
delete localStorage['foo'];
       若要一次性全部删除,可以使用clear方法。


      3、数据的枚举

     可以通过key方法和length属性来枚举localStorage中的数据,也可以通过for in语句枚举

    

//key方法和length枚举
for(var i=0;i<localStorage.length;i++) {

     var key =localStorage.key(i),
           value=localStorage[key];
}

//通过for in语句枚举
for(var key in localStorage) {
    //使用直接属性
    if(localStorage.hasOwnProperty(key)) {
       var value=localStorage[key];
    }
}


Web Storage中的storage事件:

    在某一个窗口改变了Web Storage的数据后,就会在其他窗口触发storage事件,通过监听该事件,就能保证多个同时打开窗口间的数据一致性。

   

window.addEventListener('storage',function(event) {
    if(event.key === 'userid'){
         var msg = 'Hello '+ event.newValue;
         document.getElementById('msg').textContent = msg;
    }
},false);

命名空间的管理:

    应该避免直接对于localStorage的数据添加,而是对于一个服务,创建该服务对应的命名空间,然后将其绑定到localStorage中

//以服务为单位进行命名空间管理

var SERVICE_NAME ='my service',
      mystorage = null;
//通过load事件读取数据到本地变量
window.onload = function() {
     try{
           mystorage =JSON.parse(localStorage[SERVICE_NAME] || '{}');
     }catch(e){
           mystorage = {};
      }
};
//通过beforeunload事件将数据写入localStorage
window.onbeforeunload = function() {
    localStorage[SERVICE_NAME] = JSON.stringfy(storage);
}

此时,对于多个标签页的数据一致性问题,就需要在合适的时间,将本地变量写入localStorage中进行同步,并捕捉storage事件,在其他页执行更新操作,读到本地变量。

//写入localStorage
function setStorage(key,value){
     storage[key] = value;
     localStorage[SERVICE_NAME] =JSON.stringfy(storage);
}

//其他页内读入本地变量
window.onstorage= function(event) {
    if(event.key === SERVICE_NAME && event.newValue){
        storage = JSON.parse(event.newValue);
    }
}





上一篇:VS2010中String^的几个常用类型转换


下一篇:hadoop1.2.1在ubuntu上的安装