安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

localStorage灵魂五问。5M??10M

11月15日 寒霜坞投稿
  灵魂五问localStorage存储的键值采用什么字符编码5M的单位是什么localStorage键占不占存储空间localStorage的键的数量,对写和读性能的影响写个方法统计一个localStorage已使用空间
  我们挨个解答,之后给各位面试官又多了一个面试题。
  我们常说localStorage存储空间是5M,请问这个5M的单位是什么?localStorage存储的键值采用什么字符编码?
  打开相对权威的MDNlocalStoragedescription〔1〕
  ThekeysandthevaluesstoredwithlocalStoragearealwaysintheUTF16DOMString〔2〕format,whichusestwobytespercharacter。Aswithobjects,integerkeysareautomaticallyconvertedtostrings。
  翻译成中文:
  localStorage存储的键和值始终采用UTF16DOMString格式,每个字符使用两个字节。与对象一样,整数键将自动转换为字符串。
  答案:UTF16
  MDN这里描述的没有问题,也有问题,因为UTF16,每个字符使用两个字节,是有前提条件的,就是码点小于0xFFFF(65535),大于这个码点的是四个字节。
  这是全文的关键。5M的单位是什么
  5M的单位是什么?
  选项:字符的个数字节数字符的长度值bit数utf16编码单元
  以前不知道,现代浏览器,准确的应该是选项3,字符的长度,亦或选项5,utf16编码单元
  字符的个数,并不等于字符的长度,这一点要知道:a。length1人。length1。length2。length2
  现代浏览器对字符串的处理是基于UTF16DOMString〔2〕。
  但是说5M字符串的长度,显然有那么点怪异。
  而根据UTF16编码规则,要么2个字节,要么四个字节,所以不如说是10M的字节数,更为合理。
  当然,2个字节作为一个utf16的字符编码单元,也可以说是5M的utf16的编码单元。
  我们先编写一个utf16字符串计算字节数的方法:非常简单,判断码点决定是2还是4functionsizeofUtf16Bytes(str){vartotal0,charCode,i,for(i0,lenstr。i){charCodestr。charCodeAt(i);if(charCode0xffff){total2;}else{total4;}}}
  我们再根绝10M的字节数来存储
  我们留下8个字节数作为key,8个字节可是普通的4个字符换,也可是码点大于65535的3个字符,也可是是组合。
  下面的三个组合,都是可以的,aaaaaa
  在此基础上增加任意一个字符,都会报错异常异常。constcharTxt人;letcount(10102410242)82;letcontentnewArray(count)。fill(charTxt)。join();localStorage。clear();try{localStorage。setItem(key,content);}catch(err){console。log(err,err);}constsizeKeysizeofUtf16Bytes(key);constcontentSizesizeofUtf16Bytes(content);console。log(keysize:,sizeKey,content。length);console。log(contentsize:,contentSize,content。length);console。log(totalsize:,sizeKeycontentSize,content。lengthkey。length);
  现代浏览器的情况下:
  所以,说是10M的字节数,更为准确,也更容易让人理解。
  如果说5M,那其单位就是字符串的长度,而不是字符数。
  答案:字符串的长度值,或者utf16的编码单元
  更合理的答案是10M字节空间。localStorage键占不占存储空间
  我们把key和val各自设置长2。5M的长度constcharTletcount(2。510241024);letcontentnewArray(count)。fill(charTxt)。join();constkeynewArray(count)。fill(charTxt)。join();localStorage。clear();try{console。time(setItem)localStorage。setItem(key,content);console。timeEnd(setItem)}catch(err){console。log(errcode:,err。code);console。log(errmessage:,err。message)}
  执行正常。
  我们把content的长度加1,变为2。5M1,key的长度依旧是2。5M的长度constcharTletcount(2。510241024);letcontentnewArray(count)。fill(charTxt)。join()1;constkeynewArray(count)。fill(charTxt)。join();localStorage。clear();try{console。time(setItem)localStorage。setItem(key,content);console。timeEnd(setItem)}catch(err){console。log(errcode:,err。code);console。log(errmessage:,err。message)}
  产生异常,存储失败。至于更多异常详情吗,参见localstorage功能检测〔3〕:functionstorageAvailable(type){try{storagewindow〔type〕;storage。setItem(x,x);storage。removeItem(x);}catch(e){returneinstanceofDOMException(everythingexceptFirefoxe。code22Firefoxe。code1014testnamefieldtoo,becausecodemightnotbepresenteverythingexceptFirefoxe。nameQuotaExceededErrorFirefoxe。nameNSERRORDOMQUOTAREACHED)acknowledgeQuotaExceededErroronlyiftheressomethingalreadystored(storagestorage。length!0);}}
  答案:占空间键的数量,对读写的影响
  我们5001000键,如下letkeyCount5001000;localStorage。clear();for(leti0;ikeyCi){localStorage。setItem(i,);}setTimeout((){console。time(savecost);localStorage。setItem(a,1);console。timeEnd(savecost);},2000)setTimeout((){console。time(readcost);localStorage。getItem(a);console。timeEnd(readcost);},2000)savecost:0。05615234375msreadcost:0。008056640625ms
  你单独执行保存代码:localStorage。clear();console。time(savecost);localStorage。setItem(a,1);console。timeEnd(savecost);savecost:0。033203125ms
  可以多次测试,影响肯定是有的,也仅仅是数倍,不是特别的大。
  反过来,如果是保存的值表较大呢?constcharTconstcount5102410241constval1newArray(count)。fill(charTxt)。join();setTimeout((){localStorage。clear();console。time(savecost1);localStorage。setItem(a,val1);console。timeEnd(savecost1);},1000)setTimeout((){localStorage。clear();console。time(savecost2);localStorage。setItem(a,a);console。timeEnd(savecost2);},1000)savecost1:12。276123046875mssavecost2:0。010009765625ms
  可以多测试很多次,单次值的大小对存的性能影响非常大,读取也一样,合情合理之中。
  所以尽量不要保存大的值,因为其是同步读取,纯大数据,用indexedDB就好。
  答案:键的数量对读取性能有影响,但是不大。值的大小对性能影响更大,不建议保存大的数据。写个方法统计一个localStorage已使用空间
  现代浏览器的精写版本:functionsieOfLS(){returnObject。entries(localStorage)。map(vv。join())。join()。}
  测试代码:localStorage。clear();localStorage。setItem(,1);localStorage。setItem(,1111);console。log(size:,sieOfLS())23915291523html的协议标准
  WHATWG超文本应用程序技术工作组的localstorage〔4〕协议定了localStorage的方法,属性等等,并没有明确规定其存储空间。也就导致各个浏览器的最大限制不一样。
  其并不是ES的标准。页面的utf8编码
  我们的html页面,经常会出现。告知浏览器此页面属于什么字符编码格式,下一步浏览器做好解码工作。headmetacharsetUTF8metahttpequivXUACompatiblecontentIEedgemetanameviewportcontentwidthdevicewidth,initialscale1。0title容器titlehead
  这和localStorage的存储没有半毛钱的关系。localStorage扩容
  localStorage的空间是10M的字节数,一般情况是够用,可是人总是有贪欲。真达到了空间限制,怎么弄?
  localStorage扩容就是一个话题。
投诉 评论 转载

用过华为的苹果用户,对两种手机有什么感觉?华为手机我用过,苹果手机我也用过,不吹不黑说一下我的真实感受:1。华为手机买来上面就有一堆自带的软件,新款苹果手机买来上面很干净。2。同样的内存,感觉华为手机特别吃内存,……华为或将推出巨屏手机!配6000mAh电池,后置镜头模组类似大屏手机在当下还是很深得用户芳心的,但我们发现很少有高端旗舰机型做大屏设计,一方面是成本问题,一方面则是受众群体偏少一些。不过华为似乎有一个大胆的决定,爆料称华为或许会在未来发……高艳东用好法律武器应对信息战来源:环球时报俄罗斯通信监管机构近日表示,因谷歌公司未能删除YouTube中的虚假宣传信息,已对其提起两起行政诉讼。此前,俄罗斯总统普京签署一项新法案,扩大早前的假新闻法……如何在两个线程之间共享数据?【死记硬背】Java里面进行多线程通信的主要方式就是共享内存的方式,共享内存主要的关注点有两个:可见性、有序性和原子性。Java内存模型(JMM)解决了可见性和有序性的问……做智慧停车产业前景怎么样?我个人感觉智慧停车产值非常大,主要有以下原因1、城市发展需要,现在城市发展停车难的问题日益加重2、一线城市,比如深圳,做的无感支付,无人值守,手机支付,路边停车等智……榆林的新城你看好哪里呢?科创新城落地项目都是榆林的未来科研项目,因此看好科创新城的未来,五到十年以后目前规划项目:中科院榆林创新研究院、西交大榆林碳中和学院、1号公园绿地、2号公园绿地、电视塔、……localStorage灵魂五问。5M??10M灵魂五问localStorage存储的键值采用什么字符编码5M的单位是什么localStorage键占不占存储空间localStorage的键的数量,对写和读性能的影响写个方法……放弃固网竞争长城宽带离场面对巨大的竞争压力,全国最大的民营宽带企业、长城宽带的母公司鹏博士选择了主动撤退。4月3日,鹏博士相关负责人向北京商报记者证实了鹏博士主动放弃参与固网宽带竞争的传闻。上述负责人……1亿用户不是梦,8款机型再开启HarmonyOS2内测根据华为HarmonyOS官方最新消息,HarmonyOS2升级用户数已经突破5000万,而从6月2日至今,两个多月的时间,平均每秒就有8个用户升级,真是大国之骄傲,因为有国人……八珍玉食五味俱全DC评声迪孔雀在源远流长的中华文化当中,神奇的味字不仅被用来形容舌尖上的感触。除了舌之所尝,在中国文化里,对于味道的感知和定义,既起源于饮食,又超越了饮食。也就是说,能够真真切切地感觉到美味……30。98万元起,广汽丰田赛那为爱上市,掀起高端MPV新潮流10月30日,耀目登场,不负众望,丰田全球旗舰MPV赛那为爱上市。赛那共计推出六款车型,售价区间为30。9840。58万元。全球旗舰品质,全维价值革新,赛那以超越同级的卓越产品……电视盒子哪款好?丘仔真机评测当贝电视盒子怎么样随着电视盒子品牌的增多,让大家在选购电视盒子的时候不知道选择什么款式、配置好。丘仔这几年评测过的电视盒子已经有几十款了,被问到最多的就是电视盒子哪款好?现在人气最高的盒子有泰捷……
资本市场观察中国移动回A上市560亿募集资金将投向何处AirPodsPro新品曝光,AirPods2为前辈让路跌至英特尔放大招!计划开放x86授权吸引芯片设计公司找它代工无人驾驶真的可行吗?一步到位的喝水大宝贝,云米X2泉先净饮机使用体验支付宝再创新!让个人拥有借呗反悔权,不怕用户薅羊毛?小东西也有大本领,向日葵开机棒,远程操作不求人有没有还未发现的新陨石品种?为什么?电脑BIOS即将完全消亡,UEFI取而代之流量排名世界前50的网站,你知道几个?素士科技冲击电动牙刷第一股小米系持股19。47营收增速急刹车加班为何屡禁不止!谁是行业第一呢?国家统计局数据给你答案

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利