美文网首页
Performance和监控内存的几种方式

Performance和监控内存的几种方式

作者: 浅忆_0810 | 来源:发表于2020-10-19 23:31 被阅读0次

    为什么使用Performance

    • GC的目的是为了实现内存空间的良性循环
    • 良性循环的基石是合理使用
    • 时刻关注才能确定是否合理
    • Performance提供多种监控方式

    Performance使用步骤

    • 打开浏览器输入目标网址
    • 进入开发人员工具面板,选择Performance(性能)
    • 开启录制功能,访问具体界面
    • 执行用户行为,一段时间后停止录制
    • 分析界面中记录的内存信息(点击Memory -> 选择JS Heap

    监控内存的几种方式

    内存问题的外在表现:

    • 页面出现延迟加载或经常性暂停
    • 页面持续性出现糟糕的性能
    • 页面的性能随时间延长越来越差

    界定内存的标准:

    • 内存泄漏:内存使用持续升高
    • 内存膨胀:在多数设备上都存在性能问题
    • 频繁垃圾回收:通过内存变化图进行分析

    1. 浏览器任务管理器

    • shift + Esc调出浏览器自带的任务管理器

    • 右键勾选JavaScript使用的内存

    • 内存:DOM节点所占据的内存

      JavaScript使用的内存:表示js的堆,()里面表示所有可达对象正在使用的内存大小

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>任务管理器监控内存变化</title>
    </head>
    <body>
      <button id="btn">add</button>
    
      <script>
        const oBtn = document.getElementById('btn');
    
        oBtn.onclick = function() {
          let arrList = new Array(1000000);
        }
      </script>
    </body>
    </html>
    

    2. Timeline记录内存

    • 进入开发人员工具面板,选择Performance(性能)
    • 开启录制功能,访问具体界面
    • 执行用户行为,一段时间后停止录制
    • 分析界面中记录的内存信息(点击Memory -> 选择JS Heap
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>时间线记录内存变化</title>
    </head>
    <body>
      <button id="btn">add</button>
    
      <script>
        const arrList = [];
    
        function test() {
          for (let i = 0; i < 10000; i++) {
            document.body.appendChild(document.createElement('p'));
            arrList.push(new Array(10000).join('x'));      
          }
        }
        
        document.getElementById('btn').addEventListener('click',test);
      </script>
    </body>
    </html>
    

    3. 堆快照查找分离DOM

    什么是分离DOM

    • 界面元素存活在DOM树上
    • 垃圾对象时的DOM节点
    • 分离状态的DOM节点
    • 进入开发人员工具面板,选择Memory(内存)
    • 选择Heap snapshot(堆快照)
    • 点击Take snapshot(获取快照)
    • 点击生成的快照,搜索deta
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>堆快照监控内存变化</title>
    </head>
    <body>
      <button id="btn">add</button>
    
      <script>
        var tmpEle;
    
        function fn() {
          var ul = document.createElement('ul');
          for (let i = 0; i < 10; i++) {
            var li = document.createElement('li');
            ul.appendChild(li);   
          }
          tmpEle = ul;
        }
        
        document.getElementById('btn').addEventListener('click', fn);
      </script>
    </body>
    </html>
    

    优化方法:

    function fn() {
      var ul = document.createElement('ul');
      for (let i = 0; i < 10; i++) {
        var li = document.createElement('li');
        ul.appendChild(li);
      }
      tmpEle = ul;
    
      tmpEle = null;
    }
    

    相关文章

      网友评论

          本文标题:Performance和监控内存的几种方式

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