2012-07-23 52 views
5

總HTML5存儲大小,我需要一種方法來發現,通過使用HTML5 sessionStorage/localStorage在運行時應用程序所花費的總規模。如何獲得使用當前應用

我不希望基於探查器的方法。

什麼我目前做的是 -

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 2012-07-23 13:51:25

+0

@Christoph:是的,正如我在我的問題中已經提到的那樣。你是否建議把它乘以每個字符假設的字節權重? – 2012-07-23 14:59:02

回答

11

不,不是跨瀏覽器。 IE排序爲has it,其他則不。但當然,可以計算域上的剩餘尺寸。看下面的例子。

僅適用於IE:

var remSpace = window.localStorage.remainingSpace; 

對於FF /鉻/ Safari瀏覽器:

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

歌劇: 5 MB的標準,但瀏覽器提供增加極限應用需要更多的空間。

+0

整潔:)我可以忍受,因爲我不指望它超過5 MB。 – 2012-07-24 04:43:00

+0

這裏的問題是假設內存總量是5MB,但你可以調整,例如ff來增加它。 – 2014-04-10 11:30:27

+0

但鉻的限制看起來是10 MB。請參閱:https://cs.chromium.org/chromium/src/content/common/dom_storage/dom_storage_types.h?dr=C&l=24 – venkatvb 2017-04-26 07:03:58

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萬個「價值」字符?那麼'鑰匙'的尺寸呢?我也不應該檢查'1024 * 1024 * 2'(對於2 MB)? – 2014-01-13 07:21:01

相關問題