首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jsonp内存泄漏

jsonp内存泄漏
EN

Stack Overflow用户
提问于 2010-08-12 04:57:55
回答 1查看 1.1K关注 0票数 0

因此,我最近设置了一个chrome扩展来刷新页面,并调用我编写的jsonp web服务,但是内存泄漏。我搜索了所有的互联网,寻找解决方案,但似乎没有任何效果。我使用了指定"jsonp“的普通jQuery .ajax()调用,使用了在http://code.google.com/p/jquery-jsonp/中找到的jquery,以及一系列其他方法.我无法让内存泄漏消失。有人能指给我一个做我想要做的事情的例子吗?或者指出正确的方向?我只需要看到脚本不断地调用jsonp调用,而不是泄漏内存。

在运行我的代码时,在我到达以下代码之前没有泄漏:

代码语言:javascript
复制
$.jsonp({
                url: serviceUrl + "/AddPick?callback=?&" + jQuery.param(json),
                success: function (returned, textStatus) {
                    callback({ "d": returned.d, "pickCount": pickCount });
                }
            });

如果我用:callback({ "d": "1", "pickCount": pickCount });替换代码,那么泄漏就消失了。

EN

回答 1

Stack Overflow用户

发布于 2010-08-12 17:16:47

如果您的代码是这样构造的:

代码语言:javascript
复制
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函数。调用堆栈可能如下所示:

代码语言:javascript
复制
> callback
  > $.jsonp
    > NEW success
      > callback
        > $.jsonp
          > NEW success
            > ...

不断增长的堆栈、在每次迭代中创建的新success函数以及success函数本身的整个上下文(包括returnedtextStatuscallback的上下文)最终导致运行时必须跟踪但基本上未使用的对象。

另一种选择是在callback的作用域之外有一个助手函数。

代码语言:javascript
复制
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
  });
}

如果需要,将函数设置为私有函数。例如:

代码语言:javascript
复制
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;
})();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3464858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档