我有一系列图像,可以显示温度,湿度等。图像文件名不会改变,但图像本身每5分钟更新一次。我想刷新图像而无需重新加载整个页面。
以下功能实现了这一点,但经过几个周期后,处理器利用率跃升至100%。我已经在页面上注释掉了所有其他内容,所以我很肯定使用JavaScript函数刷新图像的尝试是原因。
我是JavaScript的新手,不明白为什么会发生这种情况,也不了解如何对其进行故障排除。任何帮助将不胜感激。
function dispGraphs() {
document.getElementById("tempChart").src="images/tempInside.png?t=" + Math.random();
document.getElementById("humChart").src="images/humidityInside.png?t=" + Math.random();
document.getElementById("presChart").src="images/pressureInside.png?t=" + Math.random();
document.getElementById("lightChart").src="images/light.png?t=" + Math.random();
setInterval(dispGraphs, 300000);
}
此函数由以下方式调用:
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', dispGraphs);
</script>
答案 0 :(得分:4)
那个人不应该在功能内,而是在外面。
setInterval(dispGraphs, 300000);
对于每个周期,您再次调用它,并以无限次调用函数dispGraphs
答案 1 :(得分:1)
只需使用setTimeout
setInterval
的{{1}}内容。
function dispGraphs() {
document.getElementById("tempChart").src="images/tempInside.png?t=" + Math.random();
document.getElementById("humChart").src="images/humidityInside.png?t=" + Math.random();
document.getElementById("presChart").src="images/pressureInside.png?t=" + Math.random();
document.getElementById("lightChart").src="images/light.png?t=" + Math.random();
setTimeout(dispGraphs, 300000);
}
CPU
达到100%,因为每次调用dispGraphs
函数时,都会创建一个每隔5分钟调用此函数的新间隔。因此,在5分钟之后,您将有2个间隔(第一次呼叫时创建的间隔和5分钟后创建的间隔),10分钟后您将有4个间隔,每个间隔每5分钟呼叫一次。因此,间隔的数量是指向nrIntervals = 2 ^ (minutesPassed/5)
(或类似的)时间的指数。
使用setTimeout
可确保您的功能每5分钟只调用一次。
答案 2 :(得分:0)
function dispGraphs() {
setInterval(function () {
document.getElementById("tempChart").src="images/tempInside.png?t=" + Math.random();
document.getElementById("humChart").src="images/humidityInside.png?t=" + Math.random();
document.getElementById("presChart").src="images/pressureInside.png?t=" + Math.random();
document.getElementById("lightChart").src="images/light.png?t=" + Math.random();
}, 300000);
}