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ただし、今では実行回数を制限して実行したいと考えています。たとえば、1 分あたりです。言い換えれば、観測された HTTP リクエストのいくつかを単純にスキップしたいということです。

オブザーバー関数にタイムアウトを付けますか? それとも、observed のグローバル カウンターを宣言してから、3 つおきhttp-on-modify-requestsに呼び出しますか? my_functionまたは、それを行うより良い方法はありますか?

4

1 に答える 1

1

最も簡単な方法は、前のリクエストから 333 ミリ秒以内に着信するすべてのリクエストを無視することです。これにより、1 秒あたり 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 に答える