如何最好地在JavaScript中实现轮询使用者模式

背景 回到5月份,我在WebKit上报告了有关内存保留问题的问题。看起来这个问题可能是由于Web Inspector本身造成的,但我还是不相信。 问题 出现了一个问题,我的JavaScript应用程序实现了“轮询消费者”模式,以便在数据可用时获取数据。问题在于记忆被保留并在一天中增长。 JavaScript逻辑如下: 获取数据并给我回电话 当我回电话处理数据时 然后执行第1步 这是在JavaScript中实现轮询消费者的合理方式吗?顺便说一下,我正在使用jQuery的ajax函数,当然这可能有它自己的问题。另外我使用jQuery代理作为成功处理程序,所以我认为通过范围保留应该不是问题。我没有使用代理也观察到了这个问题。一些代码:
FidsDataController.prototype.getFids = function() {
  var self = this;
  $.ajax({
...
    success: function(data) {
      // Do some processing
      // Call back in a short while...
      setTimeout($.proxy(self.getFids, self), 100);
    },
...
  });
);
    
已邀请:
你只有一份
getFids
,这很好,但每次调用你都会创建两个新函数:一个用于成功处理程序,另一个用于
$.proxy
调用。这两个函数并非每次调用都是唯一的。将它们放在可重复使用的变量中,您将节省大量额外的功能,这将大大降低您的内存泄漏潜力。 我们在构造函数中为每个对象创建每个函数的代理版本的示例。重复调用不会产生更多功能:
function FidsDataController() {
  // ...constructor...


  // Proxy these functions just once from the prototype
  this.getFids = $.proxy(this.getFids, this);
  this._getFids_success = $.proxy(this._getFids_success, this);
}

FidsDataController.prototype.getFids = function() {
  var self = this;
  $.ajax({
    success: this._getFids_success;
  });
};

FidsDataController.prototype._getFids_success = function(data) {
  // processing of data
  setTimeout(this.getFids, 100);
};
    

要回复问题请先登录注册