WebStorageを用いて名前無しデータを実装する

 WebStorageはHashタイプのデータなので、要素にいちいち名前をつけないといけない。これだと要素に多重度がある場合にわずらわしい。そこで、名前無しデータを動的に取得する方式を考える。実装方式は色々とあるが、今回は乱数を発生させて、それをプレフィックスとして設定する例を示す。なお、ここでStorageクラスはLocalStorageクラスやSessionStorageクラスの親クラスだとする。

Storage.prototype={
	initialize:function(){this.maxCount=10000000;},
	allocate:function(type,itemValue){
		var mC=this.maxCount;
		var id=type+parseInt(Math.random()*mC);
		while(this.get(id)!=null){id=type+parseInt(Math.random()*mC);}
		this.set(id, itemValue);
		return id;},
	deallocate:function(id){this.unset(id);}
}

(メンバ関数のget(), set(), unset()は子クラスに実装するが、詳しくは「WebStorageのドメイン内競合を防止する」を参照のこと。)

この実装例だと、maxCountの値が全要素の数に対して十分に大きくないとループ回数が多くなり遅くなる。最悪、無限ループに陥ることもありうるが、LocalStorageの領域はサイズがそれほど大きくなく、ここに設定する要素数のオーダーが数百万という単位にならないという前提でこういった実装にしている。目的に応じて適宜実装を変えるのも手である。以下にこのクラスの利用例を示す。

var id1=LocalStorage.allocate('dataA',"This's first.");
var id2=LocalStorage.allocate('dataA',"This's second.");
...
LocalStorage.deallocate(id1);
LocalStorage.deallocate(id2);
カテゴリー: html5_storage   タグ: , , , ,   この投稿のパーマリンク

コメントを残す