2012-07-23 5 views
5

実行時にHTML5 sessionStorage/localStorageを使用してアプリケーションが使用した合計サイズを見つける方法が必要です。現在のアプリケーションで使用されているhtml5ストレージの合計サイズを取得する方法

私はプロファイラベースのアプローチを望んでいません。

私が現在やっていることである -

var data = 0; 
for(var v in window.sessionStorage){ 
data += window.sessionStorage.getItem(v); 
} 

console.log(data);//.length to get char length 

そして私は、テキストファイルにこの値をコピー&ペーストしてサイズを確認してください。

醜いですが、まだ私を助けません。 HTML5 APIにはこれを組み込んだ方法(あらゆる方法)がありますか?

ありがとうございます。

+0

これは文字列化されているため、 'data.length'は少なくとも文字数を与える必要があります。 – Christoph

+0

@Christoph:私の質問ですでに言及したように。 1文字あたりの想定バイト数を乗算することをお勧めしますか? –

答えて

11

いいえ、クロスブラウザではない。 IEの並べ替えhas it、他はありません。もちろん、残りのサイズはドメインのになります。下記の例を参照してください。 FF /クローム/サファリのために

var remSpace = window.localStorage.remainingSpace; 

var limit = 1024 * 1024 * 5; // 5 MB 
var remSpace = limit - unescape(encodeURIComponent(JSON.stringify(localStorage))).length; 

オペラ:IEの場合のみ

5メガバイトが標準ですが、ブラウザを使用すると、アプリケーションはより多くのスペースを必要とする制限を増やすために提供しています。

+0

きちんとした:)私はそれが5 MBを超えることは期待していないので、私はそれと一緒に暮らすことができます。 –

+0

ここで問題となるのは、合計メモリが5MBと仮定されていますが、たとえばffを調整してそれを増やすことができます。 –

+0

しかし、クロムで限界は10MBに見えます。参照:https://cs.chromium.org/chromium/src/content/common/dom_storage/dom_storage_types.h?dr=C&l=24 – venkatvb

0

私はこの問題を自分自身の解決策を見つけようとしているのですが、他の人にとって役立つかもしれない場合に備えて、私が終わったところで分かち合いたいと思っていました。

私はlocalStorageに値を追加すると、そのキーを配列に入れます。次に、localStorageに何か他のものを書き込む前に、キーをループし、長さの合計を取得して、私が快適であるしきい値を超えていないことを確認します。

localStorageが2Mb(この場合)より大きい場合、localStorageから最初の項目を削除し、その項目を配列から削除して、新しい項目を書き込みます。

// check the size of localStorage 

var localStorageArray = []; 
var localStorageSize = 0; 

for (var i=0; i < localStorageArray.length; i++) { 
    localStorageSize += localStorage.getItem(localStorageArray[i]).length; 
} 

// save to localStorage if it has not been saved already 

if (!localStorage.getItem(key)){ 
    if (localStorageSize < 2000000) { 
     localStorage.setItem(key, value); 
     localStorageArray.push(key); 
    } else { 
     localStorage.removeItem(localStorageArray[0]); 
     localStorageArray.shift(); 
     localStorage.setItem(key, value); 
     localStorageArray.push(key); 
    } 
} 
+0

投稿していただきありがとうございます。しかし、200万の 'value'文字があるかどうかをチェックしていませんか?キーの大きさはどうですか?また、私は '1024 * 1024 * 2'(2 MB)をチェックしてはいけませんか? –

関連する問題