我有一个数字时钟函数,它从JSON结果中获取小时,分钟和秒,将它们解析为整数,对它们进行数学计算(每次循环时加1到秒,如果秒为0,加1到分钟等。在那个数学运算之后,我将这三个变量解析为字符串,然后我可以使用前导0来填充它们,以获得看起来像
的结果10时05分34秒 (小时,分钟,秒)。
我使用此方法而不是日期时间,因为JS将始终在本地时间解析日期时间,但这三个变量基于服务器时间。
function countTime(){
timeSeconds = parseInt(timeSeconds);
timeMinutes = parseInt(timeMinutes);
timeHours = parseInt(timeHours);
timeSeconds = (timeSeconds + 1);
if (timeSeconds == 60){timeMinutes = (timeMinutes + 1); timeSeconds = 0;};
if (timeMinutes == 60){timeHours = (timeHours + 1); timeMinutes = 0;};
//convert from 24 to 12 hour time, and "0" hour to 12
if (timeHours > 12){
timeHours = (timeHours - 12)
};
if (timeHours == 0){
timeHours = 12;
};
//back to strings so that 0s can be padded
timeSeconds = timeSeconds.toString();
timeMinutes = timeMinutes.toString();
timeHours = timeHours.toString();
//pad 0s
if (timeSeconds <= 10 && timeSeconds.length < 2)(timeSeconds = ("0" + timeSeconds));
if (timeMinutes <= 10 && timeMinutes.length < 2)(timeMinutes = ("0" + timeMinutes));
if (timeHours <= 10 && timeHours.length < 2)(timeHours = ("0" + timeHours));
//show time
timetext = timeHours + ":" + timeMinutes + ":" + timeSeconds
$('#BT').html(timetext);
};
此函数调用它以一定间隔设置它:
function updateTime() {
countTime();
timeInt = setInterval(countTime,1000);
console.log('updated time from server');
};
timeInt
之前已全局初始化,因此我可以在窗口焦点事件上清除该间隔。
当我从我的页面中取出这个功能时,我的内存使用量大约为20kb,相当确定。包含此功能,内存使用开始大约40kb并且每秒增加(我认为这意味着内存泄漏......)。 updateTime
是在非标准时间间隔内调用的(大约每45分钟由AJAX调用的成功回调调用timeHours
,timeMinutes
和timeSeconds
。我是否有范围问题?当我在一段时间内countTime
时,我是否会不必要地重新定义变量?
答案 0 :(得分:1)
您正在泄漏间隔计时器。您需要在再次初始化之前致电clearInterval
。
function updateTime() {
countTime();
clearInterval(timeInt); // Here
timeInt = setInterval(countTime,1000);
console.log('updated time from server');
};