当前位置: 首页 > 面试题库 >

如何找到localStorage的大小

柴彬
2023-03-14
问题内容

我目前正在开发一个使用HTML5的localStorage的站点。我已经阅读了有关不同浏览器大小限制的所有信息。但是,关于如何找出localStorage实例的当前大小,我还没有看到任何东西。这个问题似乎表明JavaScript没有内置的方式来显示给定变量的大小。localStorage是否具有我未见过的内存大小属性?有没有一种简单的方法可以做到这一点,而我却没有呢?

我的网站旨在允许用户以“离线”模式输入信息,因此能够在存储空间即将用尽时向他们发出警告非常重要。


问题答案:

在JavaScript控制台(单行版本)中执行以下代码段:

var _lsTotal=0,_xLen,_x;for(_x in localStorage){ if(!localStorage.hasOwnProperty(_x)){continue;} _xLen= ((localStorage[_x].length + _x.length)* 2);_lsTotal+=_xLen; console.log(_x.substr(0,50)+" = "+ (_xLen/1024).toFixed(2)+" KB")};console.log("Total = " + (_lsTotal / 1024).toFixed(2) + " KB");

多行阅读同一条代码

var _lsTotal = 0,
    _xLen, _x;
for (_x in localStorage) {
    if (!localStorage.hasOwnProperty(_x)) {
        continue;
    }
    _xLen = ((localStorage[_x].length + _x.length) * 2);
    _lsTotal += _xLen;
    console.log(_x.substr(0, 50) + " = " + (_xLen / 1024).toFixed(2) + " KB")
};
console.log("Total = " + (_lsTotal / 1024).toFixed(2) + " KB");

或将此文本添加到书签的“位置”字段中以方便使用

javascript: var x, xLen, log=[],total=0;for (x in localStorage){if(!localStorage.hasOwnProperty(x)){continue;} xLen =  ((localStorage[x].length * 2 + x.length * 2)/1024); log.push(x.substr(0,30) + " = " +  xLen.toFixed(2) + " KB"); total+= xLen}; if (total > 1024){log.unshift("Total = " + (total/1024).toFixed(2)+ " MB");}else{log.unshift("Total = " + total.toFixed(2)+ " KB");}; alert(log.join("\n"));

PS片段根据注释中的要求进行更新。现在,计算包括密钥本身的长度。每个长度都乘以2,因为javascript中的char存储为UTF-16(占用2个字节)

PPS应该可以在Chrome和Firefox中使用。



 类似资料:
  • 问题内容: 我正在使用Ubuntu 11.04。如何找出进程的最大调用堆栈大小以及堆栈中每个帧的大小? 问题答案: 您可以使用查询最大进程和堆栈大小。堆栈框架没有固定的尺寸。它取决于每个帧需要多少本地数据(即本地变量)。 要在命令行上执行此操作,可以使用ulimit。 如果要为正在运行的进程读取这些值,我不知道执行此操作的任何工具,但是查询/ proc文件系统很容易:

  • 问题内容: 我试图显示最高平均工资;但是,我似乎无法使其正常工作。 我可以得到要显示的平均薪水清单: 但是,当我尝试显示具有以下项的最大平均薪水列表时: 它没有运行。我收到“无效标识符”错误。如何使用每个工人的平均工资来找到每个工人的最高平均工资? 谢谢。 问题答案: 由聚合函数(例如avg)产生的列通常获得任意名称。只需为其使用别名,然后在其上进行选择:

  • 问题内容: 由于(当前)仅支持将字符串作为值,并且为了做到这一点,需要先将对象进行字符串化(存储为JSON- string),然后才可以定义值的长度。 有谁知道是否存在适用于所有浏览器的定义? 问题答案: 储存空间 暗示,使用DOM存储,您具有比对Cookie施加的典型用户代理限制更大的存储空间。但是,提供的数量未在规范中定义,用户代理也没有有意义地广播。 如果您查看Mozilla源代码,我们可以

  • 问题内容: 由于(当前)仅支持将字符串作为值,并且为了做到这一点,需要先将对象进行字符串化(存储为JSON- string),然后才可以定义值的长度。 有谁知道是否存在适用于所有浏览器的定义? 问题答案: 引用有关Web存储的Wikipedia文章: 可以简单地将网络存储视为Cookie的一种改进,它提供了更大的存储容量(Google Chrome中每个原始站点10 MB,Mozilla Fire

  • 问题内容: 我试过函数,但它给出了声明的值。该函数给出一个错误。 码: 输出在这里,我需要数组中的全部项目(即)。 问题答案: Go中的数组是固定大小的:在Go中创建数组后,以后就无法更改其大小。这是这样一种程度,即一个阵列的长度是阵列类型的一部分(这意味着类型和2层不同的类型)。就是说,某种数组类型的值的长度始终是相同的,并且由其类型决定。例如,类型为array的值的长度始终为,(可以使用内置函

  • 问题内容: HTML5的localStorage数据库通常受大小限制-每个域的标准大小为5或10MB。子域可以绕过这些限制吗(例如example.com,hack1.example.com和hack2.example.com都有自己的5 MB数据库)?标准中是否有任何内容指定父域是否可以访问其子级数据库?我什么也找不到,我可以看到以任何一种方式执行此操作的参数,但似乎必须要有一些标准模型。 问题答