因此,我最近设置了一个chrome扩展来刷新页面,并调用我编写的jsonp web服务,但是内存泄漏。我搜索了所有的互联网,寻找解决方案,但似乎没有任何效果。我使用了指定"jsonp“的普通jQuery .ajax()调用,使用了在http://code.google.com/p/jquery-jsonp/中找到的jquery,以及一系列其他方法.我无法让内存泄漏消失。有人能指给我一个做我想要做的事情的例子吗?或者指出正确的方向?我只需要看到脚本不断地调用jsonp调用,而不是泄漏内存。
在运行我的代码时,在我到达以下代码之前没有泄漏:
$.jsonp({
url: serviceUrl + "/AddPick?callback=?&" + jQuery.param(json),
success: function (returned, textStatus) {
callback({ "d": returned.d, "pickCount": pickCount });
}
});如果我用:callback({ "d": "1", "pickCount": pickCount });替换代码,那么泄漏就消失了。
发布于 2010-08-12 17:16:47
如果您的代码是这样构造的:
function callback() {
// (or similar, maybe with `setTimeout`)
$.jsonp({
url: serviceUrl + "/AddPick?callback=?&" + jQuery.param(json),
success: function (returned, textStatus) {
callback({ "d": returned.d, "pickCount": pickCount });
}
});
}然后递归地创建一个新的success函数。调用堆栈可能如下所示:
> callback
> $.jsonp
> NEW success
> callback
> $.jsonp
> NEW success
> ...不断增长的堆栈、在每次迭代中创建的新success函数以及success函数本身的整个上下文(包括returned、textStatus和callback的上下文)最终导致运行时必须跟踪但基本上未使用的对象。
另一种选择是在callback的作用域之外有一个助手函数。
function callCallback(returned, textStatus) {
callback({ "d": returned.d, "pickCount": pickCount });
}
function callback() {
// (or similar, maybe with `setTimeout`)
$.jsonp({
url: serviceUrl + "/AddPick?callback=?&" + jQuery.param(json),
success: callCallback
});
}如果需要,将函数设置为私有函数。例如:
var callback = (function () {
function callCallback(returned, textStatus) {
callback({ "d": returned.d, "pickCount": pickCount });
}
function callback() {
// (or similar, maybe with `setTimeout`)
$.jsonp({
url: serviceUrl + "/AddPick?callback=?&" + jQuery.param(json),
success: callCallback
});
}
return callback;
})();https://stackoverflow.com/questions/3464858
复制相似问题