2011-07-22 19 views
1

私の以前の質問に対する答えはうまくいきません。問題は、サーバーに要求がオーバーロードされていることです。後続の要求が少し減速するように、プロセスにはスロットルが必要です。ここに問題のコードがあります。 timerまたはsetIntervalを必要とする重要なコードセグメントは、「Profile Rejected」アラートの前にあるものですが、両方を遅くしてもかまいません。助言がありますか?HTTP要求を抑制するGoogle Chromeの拡張子

if (greetThisOne==true && !bGreeted) 
{ 
    //alert ("Requesting Message Page"); 
    console.log="Message Page Requested"; 
    chrome.extension.sendRequest({cmd: "openMessage", url: messageLink, keyWordsFound: keyWordList, greeted: bGreeted});  
} 
else 
{ 
    //alert("Profile Rejected"); 
    console.log="Profile Rejected"; 
    chrome.extension.sendRequest({cmd: "profileRejected", url: messageLink, keyWordsFound: keyWordList, greeted: bGreeted}); 
} 
+0

それで問題または質問は何ですか?あなたはタイマーを試しましたが、うまくいかなかったのですか? –

答えて

1

バックグラウンドページにいくつかのキューを実装する必要があります。例:

var rejectedProfiles = []; 
processRejectedProfiles(); 

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    if(request.cmd == "profileRejected") { 
     //add to the end of queue 
     rejectedProfiles.push({url: request.url, other: request.parameters}); 
    } 
    sendResponse({}); 
}); 

function processRejectedProfiles() { 
    if(rejectedProfiles.length > 0) { 
     //get the oldest element in queue 
     var profile = rejectedProfiles.shift(); 

     //process profile 
     ... 
    } 

    //process next entry in the queue in 3 seconds 
    setTimeout(processRejectedProfiles, 3000); 
} 

この方法では、一度に1つのプロファイルを処理して、遅延を与えます。

+0

これは非常に洗練されたソリューションです。 – Jerome

関連する問題