setInterval 长时间循环之后,会导致浏览器标签页卡死,须要怎么避免呢?

2021-03-13 16:04:24 +08:00
 lisisi

在页面上写了一个定时器,每秒运行一次,24 小时后销毁。结果发现超过 24 小时,这个页面大概率就卡死了,必须要重新打开浏览器才能使用。

检查了几个方面: 1 、内存没有溢出。 2 、服务器正常,换个浏览器都能正常打开这个页面。 看起来,只是浏览器( Chrome 、新 Edge 都有这个情况)当前进程或线程卡死了,关闭再打开浏览器就可以正常访问。

<p>显示运行次数:</p>
<p id="demo"></p>	
	
<script type="text/javascript">
    var timesRun = 0;
    var myVar = setInterval(function(){
        timesRun += 1;
        if(timesRun === 86400){
            clearInterval(myVar);
        }
	document.getElementById("demo").innerHTML=timesRun;    
    }, 1000);
</script>	
3946 次点击
所在节点    JavaScript
23 条回复
Roger006
2021-03-16 17:10:49 +08:00
首先每秒都执行一次,使用 setTimeout 和 setInterval 用累加值都不准确 [代码写的时间间隔并不能直接等于实际代码执行间隔时间] ,建议保留原始时间,每次执行方法获取当前时间,然后做减法获取剩余时间。前边#15 #18 已经说明过了
justsosososo
2021-03-18 11:19:09 +08:00
个人见解,不对勿喷,我感觉问题应该出现在那个 function,因为函数声明每次都会在堆内存中开辟一块空间,你这样一直循环目测会一直增加, lz 可以试着 把函数定义在外面,然后试试,
TKI
2022-03-22 21:25:44 +08:00
#3 说的有点道理,楼主最后是通过 递归 setTimeout 解决的吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/761311

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX