【发布时间】:2015-06-01 00:26:24
【问题描述】:
我有以下代码用于显示当前日期和时间,我希望它始终更新,因此我有一个 setInterval 每秒更新一次。这似乎导致该页面占用了 25% 的 CPU,并且它占用的内存不断攀升,页面打开的时间越长。
我能做些什么来提高它的性能吗?
jQuery(function($){
(function update_time(){
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var dt = new Date();
var hr = dt.getHours() > 12 ? dt.getHours() - 12 : dt.getHours();
var mi = dt.getMinutes() < 10 ? "0" + dt.getMinutes() : dt.getMinutes();
var sd = dt.getSeconds() < 10 ? "0" + dt.getSeconds() : dt.getSeconds();
var div = dt.getSeconds() & 1 ? ":" : " ";
$('.hour').text(hr);
$('.minute').text(mi);
$('.second').text(sd);
$('.day').text(days[dt.getDay()]);
$('.month').text(months[dt.getMonth()]);
$('.date').text(dt.getDate());
$('.year').text(dt.getFullYear());
$('.time-divider').text(div);
setInterval(update_time, 1000);
})();
});
【问题讨论】:
-
是的。每个
setInterval调用update_time,它调用setInterval,它调用update_time,它调用......因此不断攀升的内存使用量 -
如果要每次调用定时器使用setTimeout,否则在函数外调用setInterval
-
将 setInterval() 更改为 setTimeout()
-
setInterval调用update_time每次 时间1 秒过去,而setTImeout只会在1 秒后调用update_time一次
标签: javascript performance date time