2012-07-23 133 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

相关问题