0

在我的 Firefox 扩展代码中,我在观察 Facebook 中的 AJAX 请求后执行了某种(相当繁重的计算)功能。鉴于现在 Facebook 非常依赖它们,并且在较短的第二周期内生成了许多请求,它正在减慢扩展程序的性能!简而言之,现在我有以下内容:

var httpRequestObserver =
{
  observe: function(subject, topic, data) 
  {
    if (topic == "http-on-modify-request") 
    {
     var httpChannel = subject.QueryInterface(Components.interfaces.nsIHttpChannel);
     if (httpChannel.URI.spec.search("facebookj.com")!=-1)       
     {
      //setTimeout(function () {my_function();}, 2000);
     }
    }      
  }
};

但是,现在我想my_function通过限制执行次数来执行,比如每分钟。换句话说,我想简单地跳过一些观察到的 HTTP 请求,如果它们发生的频率超过每三秒一次!

我是否将超时附加到观察者功能?或者我是否声明一个观察到的全局计数器,http-on-modify-requests然后my_function仅在每三个之后调用一次?还是有更好的方法来做到这一点?

4

1 回答 1

1

最简单的方法是忽略在前一个请求的 333 毫秒内进入的所有请求 - 这将确保您每秒处理的请求永远不会超过 3 个:

var httpRequestObserver =
{
  previousRequest: 0,
  observe: function(subject, topic, data) 
  {
    if (topic == "http-on-modify-request") 
    {
     var httpChannel = subject.QueryInterface(Components.interfaces.nsIHttpChannel);
     var now = Date.now();
     if (httpChannel.URI.spec.search("facebookj.com")!=-1 &&
         now - this.previousRequest > 333)
     {
      this.previousRequest = now;
      my_function();
     }
    }      
  }
};
于 2012-06-13T06:30:07.063 回答