(一)前言
我们最近需要涉及一套前端缓存库, 主要对一些列表数据进行本地缓存, 避免二次进入页面空白时间太长,这里内嵌webview,持久缓存就需要使用localStorage。这里主要讲述怎么计算当前使用体积和剩余体积

(二)最大容量

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>容量</title>
</head>
<body>
  <div class="total">
    总数:
  </div>
  <button class="btn2">获取总数</button>
  <hr />
 <script>
   function getTotalSize() {
     localStorage.clear();
     var test = '0123456789';
     var add = function(num) {
       num += num;
       if(num.length === 10240) {
         test = num;
         return;
       }
       add(num);
     }
     add(test);
     var sum = test;
     var timer = setInterval(function(){
       sum += test;
       try {
         localStorage.removeItem('test');
         localStorage.setItem('test', sum);
         document.querySelector('.total').innerHTML = '总数:' +  sum.length / 1024 + 'KB'
       } catch(e) {
         alert(sum.length / 1024 + 'KB超出最大限制');
         clearInterval(timer);
       }
     }, 0.1)

   }

   document.querySelector('.btn2').addEventListener('click', function () {
     getTotalSize();
   })

 </script>
</body>
</html>

点击获取后,得到结果如下
在这里插入图片描述

(三)剩余容量

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>容量</title>
</head>
<body>
  <div class="use">
    使用:
  </div>
  <button class="btn1">获取使用</button>
  <hr />
  <div class="total">
    总数:
  </div>
  <button class="btn2">获取总数</button>
  <button class="btn3">暂停总数</button>
  <hr />
 <script>
   function getUseSize() {
     var size = 0;
     for(item in window.localStorage) {
       if(window.localStorage.hasOwnProperty(item)) {
         size += window.localStorage.getItem(item).length;
       }
     }
     document.querySelector('.use').innerHTML = '使用:' +  (size / 1024).toFixed(2) + 'KB'
   }

   document.querySelector('.btn1').addEventListener('click', function () {
     getUseSize();
   })

   var timer
   function getTotalSize() {
     localStorage.clear();
     var test = '0123456789';
     var add = function(num) {
       num += num;
       if(num.length === 10240) {
         test = num;
         return;
       }
       add(num);
     }
     add(test);
     var sum = test;
     timer = setInterval(function(){
       sum += test;
       try {
         localStorage.removeItem('test');
         localStorage.setItem('test', sum);
         document.querySelector('.total').innerHTML = '总数:' +  sum.length / 1024 + 'KB'
       } catch(e) {
         alert(sum.length / 1024 + 'KB超出最大限制');
         clearInterval(timer);
       }
     }, 0.1)

   }

   document.querySelector('.btn2').addEventListener('click', function () {
     getTotalSize();
   })
   document.querySelector('.btn3').addEventListener('click', function () {
     clearInterval(timer);
   })

 </script>
</body>
</html>

在这里插入图片描述

(四)结尾
当然涉及缓存离不开处理过期时间,这里推荐一个库,可以方便处理
lscache

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐