【问题标题】:JQuery ajax success callback never garbage collectedJQuery ajax 成功回调永远不会被垃圾收集
【发布时间】:2020-04-24 10:05:47
【问题描述】:

请原谅我看起来很有趣的 JS。它编译的咖啡脚本。

当我的 WebApp 发生某些特定事情时,我会运行以下回调函数来启动 JSON 获取请求:


GmScreen.prototype.requestPcUpdate = function(id) {
      var currentUrl, self, url;
      currentUrl = window.location.href;
      url = currentUrl.substr(0, currentUrl.lastIndexOf('/')) + '.json';
      self = this;
      return $.ajax({
        url: "/chars/" + id + ".json",
        type: "GET",
        error: function() {
          return self.onPcUpdateError(this);
        },
        success: function(pc) {
          return self.onPcUpdateReceived(pc);
        }
      });
    };

成功回调函数如下:

GmScreen.prototype.onPcUpdateReceived = function(receivedPc) {
      var pcObj;
      if (!(receivedPc['id'] in this.allPcs)) {
        console.error("No PC with ID " + receivedPc['id'] + " known!");
      }
      pcObj = this.allPcs[receivedPc['id']];
      pcObj['cmlNode'] = new CmlCharacter((new DOMParser()).parseFromString(receivedPc['cml'], 'text/xml').documentElement);
      return this.notifyPcChangeListeners();
    };

在回调函数中,我创建了一个 XML 文档(以及一个基于它的包装器对象)并分配它。当同一 id 的下一次更新到达时,文档和包装对象可以被垃圾回收。

但这永远不会发生。

在 Firefox 中,我看到阻止此内容被垃圾收集的支配者称为 mPromiseObj

随着时间的推移,这会极大地影响我的网络应用程序的性能。我怎样才能删除这个东西?

【问题讨论】:

    标签: javascript jquery firefox garbage-collection mozilla


    【解决方案1】:

    结果,我搞砸了我的回调。在notifyPcChangeListeners 的原因下,创建了一个新的侦听器,最终将调用onPcUpdateReceived

    所以让垃圾收集器不清理它是完全正确的。

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 2012-12-19
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多