1

事实证明,我之前的问题的答案不起作用。问题是我的请求使服务器超载。该过程需要一个节流阀,以便后续请求会稍微减速。这是有问题的代码。需要计时器或 setInterval 的重要代码段是由警报“Profile Rejected”开头的,尽管放慢它们的速度是可以接受的。有什么建议么?

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});
}
4

1 回答 1

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);
}

这样,您将一次处理一个配置文件,并提供延迟。

于 2011-07-22T16:52:22.540 回答