首页 > 其他分享 >包含js代码的dom元素从页面上消失后发生了什么

包含js代码的dom元素从页面上消失后发生了什么

时间:2023-06-16 15:46:22浏览次数:37  
标签:console log dom js test 页面

最近遇到了一个问题:有一个数据看板的页面运行了n天后突然页面崩溃了,爆出了out of memory的错误。页面不复杂,几个图表定时更新数据,实在没明白为什么长时间运行后会out of memory。

在每次请求后使用

 console.log(window.performance.memory);

 打印出页面的内存占用情况,然后就发现了问题,每次请求完成过后,占用的内存一直递增,长时间运行后out of memory就不奇怪了。

简单的写个demo,看下包含js代码的dom元素从页面上消失后发生了什么?js代码中的变量、函数、定时器是否还可以使用?

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="main">
      <div>test</div>
      <script>
        let a = 1;
        function test() {
          console.log("dom show");
        }
        var timer = setInterval(function () {
          a += 1;
          console.log(a);
        }, 2000);
      </script>
    </div>
  </body>
  <script>
    test();
    setTimeout(() => {
      document.querySelector("#main").remove();
      console.log("dom 消失");
      a = a + 6;
      console.log(a);
    }, 3000);
  </script>
</html>

 可以看出dom消失后 其中包含的js变量、函数、定时器依然可以继续使用

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="main">
      <div>test</div>
      <script>
        let a = 1;
        function test() {
          console.log("dom show");
        }
        var timer = setInterval(function () {
          a += 1;
          console.log(a);
        }, 2000);

        function func() {
          console.log("func");
          a = null;
          clearInterval(timer);
          test = null;
          func = null;
        }
      </script>
    </div>
  </body>
  <script>
    test();
    setTimeout(() => {
      document.querySelector("#main").remove();
      console.log("dom 消失");
      a = a + 6;
      console.log(a);
    }, 3000);

    setTimeout(() => {
      func();
    }, 5000);
  </script>
</html>

 试着在dom消失后清除其中定义的变量、函数、定时器

 在数据看板中加入清除之前变量、函数、定时器、事件的逻辑后,请求后页面内存占用的递增缓了很多,效用明显,然而虽然递增缓慢,但是整体的趋势还是在递增的,最终终会有out of memory的一天。不知道是不是漏掉了什么???

同事提到了一个简单的办法:定时刷新页面,很简单有效的解决了这个问题

  <meta http-equiv="refresh" content="360000">

 

标签:console,log,dom,js,test,页面
From: https://www.cnblogs.com/caroline2016/p/17485708.html

相关文章

  • web worker进程和线程的区别,Chrome 中有哪些常⻅进程,如果我有⼀个耗时很⻓的同步计算
    进程(Process)和线程(Thread)都是操作系统中用于多任务处理的概念。简单地说,一个进程就是一个程序的执行空间,而一个线程则是在执行空间内独立运行的执行路径。区别:进程是系统分配资源的最小单位,线程是操作系统调度的最小单位。各个进程之间是独立的,各个线程之间共享一些资源。创......
  • 视频直播源码,html2canvas 前端保存页面为图片
    视频直播源码,html2canvas前端保存页面为图片转换方法如下: /***将页面指定节点内容转为图片*1.拿到想要转换为图片的内容节点DOM;*2.转换,拿到转换后的canvas*3.转换为图片*///生成局部图片GenerateImg(){ letelement=this.$refs.canvasImgObj; //console.warn(el......
  • 直播app开发,JS 获取当天、上周、本周,下周开始时间
    直播app开发,JS获取当天、上周、本周,下周开始时间 <script>  //注释:Date.parse()//转化时间戳  //时间  varnow=newDate();//当前日期  varnowDayOfWeek=now.getDay();//今天本周的第几天  varnowDay=now.getDate();  //当前日期 ......
  • html页面解析
    getElementsByTagName和getElementsByClassName这两个方法查找多个dom元素,返回的是htmlcollection类型,是伪数组而不是真数组,故不能使用数组的方法。我们可以使用数组原型配合slice方法,利用call,apply,bind方法将伪数组转为真数组。varx=document.getElementById("main......
  • js保留小数位数(进位舍去)问题
    toFixed(x)这个方法在使用时,它内部对于进位舍去并没有使用四舍五入方法,而是使用的是银行家舍去法,即:舍去位的数值小于5时,直接舍去舍去位的数值大于等于6时,进位舍去当舍去位的数值等于5时,分为两种情况:5后面还有其他数字(非0),则进位后舍去;若5后面是0,则根据5前一位数的奇偶性来......
  • Node.js 开发常用到的库和插件工具,同事看到后也悄悄收藏了……
    Node.js是一个功能强大,并且非常流行的JavaScript运行时环境,使开发人员能够高效率的构建高性能应用程序。下面介绍了8个常见的应用程序开发中用到的库和函数,可以用于缓存数据、操作日期、处理图像、发送电子邮件、发出HTTP请求、记录请求和响应、压缩数据和哈希密码等。通过使......
  • Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
    前言  前面做了一些交互,网页是直接通过html对response进行返回的,这里QtWebApp与传统的web服务器不同,传统的web服务器可以调用同级目录相对路径或者绝对路径下的js,而QtWebApp的httpserver是response返回当前页面的问题,默认是无法调用的。  为了解决调用一些依赖的如echarts......
  • js保留小数的方法(如保留一位小数)
     js保留小数的方法如下:(以保留两位为例)1、toFixed()方法需注意,保留两位小数,将数值类型的数据改变成了字符串类型//1.四舍五入varnum=1.7321;num=num.toFixed(2);console.log(num);//1.73console.log(typeofnum);//string2、Math.floor(),不四舍五入......
  • 解决ValueError: Please install nodejs >=12.0.0 before continuing
     1、升级你的condacondaupdateconda 2、https://anaconda.org/conda-forge/nodejs  Toinstallthispackagerunoneofthefollowing运行  condainstall-c"conda-forge/label/cf202003"nodejs 先运行这个不行的话,再选其他的运行。 例如:condainstall-......
  • js正则格式化日期时间自动补0的两种解法 将2022-3-4这种日期格式转化为2022-03-04
    js正则格式化日期时间自动补0的两种解法将2022-3-4这种日期格式转化为2022-03-04https://www.jb51.net/article/225324.htm+目录背景解法一思路:代码:解法二思路:总结参考背景时间日期格式化的需求很常见,也有很多工具类转换方法,比如需要将2022-3-4这种日期格式转化为2022-......