有什么方法可以查看当前正在运行的超时和/或使用setTimeout或setInterval创建的时间间隔吗?寻找剩余setTimeouts和setInterval
由于每一个返回一个ID,有没有办法在开发人员控制台中查看当前的ID?这会帮助我在应用程序中发现“泄漏”。
我能想到现在要做到这一点的唯一方法是创建我的setInterval/setTimeout的调用的包装。或者覆盖窗口中的内置窗口(即window.setTimeout=function()
),然后让对象图保持跟踪。
有什么方法可以查看当前正在运行的超时和/或使用setTimeout或setInterval创建的时间间隔吗?寻找剩余setTimeouts和setInterval
由于每一个返回一个ID,有没有办法在开发人员控制台中查看当前的ID?这会帮助我在应用程序中发现“泄漏”。
我能想到现在要做到这一点的唯一方法是创建我的setInterval/setTimeout的调用的包装。或者覆盖窗口中的内置窗口(即window.setTimeout=function()
),然后让对象图保持跟踪。
基于this answer,
for (var i = 1; i < 99999; i++){
window.clearInterval(i);
window.clearTimeout(i);
}
希望这有助于!
@ K2xL:是的,基于这里给出的链接,可能会尝试重写setTimeout/setInterval,然后如果运行时间过长,则使用行#'(new Error).lineNumber'触发错误 – 2013-02-19 23:04:16
我刚刚为您写的代码覆盖了setTimeout
和clearTimeout
函数,并创建了一些跟踪在timeouts
这个全局变量中可用的超时函数。试试它的jsfiddle:http://jsfiddle.net/KqZmb/
(function() {
window.timeouts = [];
var _setTimeout = window.setTimeout;
window.setTimeout = function() {
var id = _setTimeout.apply(this, arguments);
timeouts.push(id);
_setTimeout(function() {
timeouts.splice(timeouts.indexOf(id), 1);
}, arguments[1]);
return id;
};
var _clearTimeout = window.clearTimeout;
window.clearTimeout = function(id) {
_clearTimeout(id);
timeouts.splice(timeouts.indexOf(id), 1);
};
})();
您可以轻松适应它setInterval
和clearInterval
。
我想,虽然说的是,你可能需要保持跟踪你的超时,以避免在您的应用程序怪异的行为...
我认为一个更好的方法来找到造成的setTimeout“泄漏”/Interval将在JS堆快照的单独部分中显示它们,而不是在开发人员控制台中提供它们的列表。 – 2013-02-22 06:43:49