【发布时间】:2015-05-20 12:39:59
【问题描述】:
我有一个数字时钟函数,它从 JSON 结果中获取小时、分钟和秒,将它们解析为整数,对它们进行数学运算(每次循环时将秒加 1,如果秒为 0,添加 1 到分钟等)。在数学之后,我将这三个变量解析为字符串,然后我可以用前导 0 填充它们以获得看起来像
的结果10:05:34 (小时、分钟、秒)。
我使用这种方法而不是datetimes,因为JS总是会解析本地时间的datetimes,但是这三个变量是基于服务器时间的。
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 的间隔?
【问题讨论】:
-
你只需要调用一次 setInterval() 来启动你的时钟。如果您多次调用它,那么您将运行多个计时器。或者,您可以使用 setTimeout 运行一次并停止。内存泄漏通常是由circular references 引起的。 Chrome 有一个object allocation tracker,这将有助于识别问题......如果有的话。
-
我也遇到了这个问题。每秒 js 堆上升,几分钟后下降。但它并没有下降到起始值,而是略高于起始值,所以我们得到了一种缓慢增加的回归曲线......
标签: javascript jquery performance memory-leaks