美文网首页
localstorage

localstorage

作者: Small_Song | 来源:发表于2022-04-27 10:21 被阅读0次

    时间:默认无时间限制;
    大小:5M,不同浏览器不确定,大致是这个数;
    如果存储内容超过5M怎么办;

    最近面试的时候关于html5API总会被问到localStorage的问题, 对于一般的问题很简单,无非就是

    • localStorage、sessionStorage和cookie这三个客户端缓存的区别

    • localStorage的API,getItem,setItem,clear等等

    • localStorage存取数据是以字符串的形式,最大容量是5M

    上面的三个问题大部分同学都可以回答出来,那么,面试官的问题来了:

    字符串最大容量是5M,那么我如果存储容量溢出了怎么办?

    其实这个5M对于不同浏览器来说也是不确定的,不过大体上是一个5M的范围,溢出了怎么办,肯定会发生错误啊。浏览器会报一个名为“QuotaExceededError”的错误,如下图:

    最后一次溢出的字符串是会存储到最大容量停止还是不会存储?

    正常情况下,可能不会存储5M的字符串,但是也不能保证浏览器日积月累的情况下,恰巧用户也没清理过缓存,那么当最后容量接近5M的时候,我们再存储一个字符串进去的时候会发生错误,发生错误的字符串是存了一半?还是压根就没存呢?答案是---没存。下面是我写的一个demo,最后发现报错的时候刷新浏览器,localStorage的当前容量为发生变化。

    既然存在安全问题,那么localStorage的使用就不是绝对安全的,如何更安全的使用localStorage?

    前端的安全性是十分重要的一个话题,因为我们直接与用户打交道,你的程序在前端发生不可预知的错误是一定要避免的。因此这种不安全的API,我们需要找到解决办法,下面是我的一个解决办法(可能不是最优解,但是可行)。

    (function(){
      var safeLocalStorage = function(key, value) {
        try{
          localStorage.setItem(key,value);
        }catch(oException){
          if(oException.name == 'QuotaExceededError'){
              console.log('已经超出本地存储限定大小!');
              // 可进行超出限定大小之后的操作,如下面可以先清除记录,再次保存
              localStorage.clear();
              localStorage.setItem(key,value);
          }
        }
      }
      this.safeLocalStorage = safeLocalStorage;
    })();
    

    相关文章

      网友评论

          本文标题:localstorage

          本文链接:https://www.haomeiwen.com/subject/fqbkyrtx.html