【发布时间】:2011-08-23 12:54:39
【问题描述】:
我想在 Chrome 扩展程序中检索和解析多个 html 页面。
对每个请求使用 Web Worker 似乎是一种让它们并行执行的简单方法。那可能吗?我的尝试失败了,可能是因为它是已知的permissions bug。
作为一种解决方法,我想我可以让主扩展页面执行多个异步 XmlHttpRequest,然后让回调将结果页面发送到 Web Worker 以进行并行解析。但是这种方法提出了一个问题,Chrome 一次可以发出多少个异步并行请求?这个问题已经被问到here,没有答案。
我正在编写的 Chrome 扩展是一个浏览器操作。
工人代码:
// Triggered by postMessage in the page
onmessage = function (evt) {
var message = evt.data;
postMessage(message.count + " started");
update(message.count, message.url);
};
// parse the results page
function parseResponse(count, url, resp) {
var msg = count.toString() + " received response ";
postMessage(msg);
}
// read the Buganizer URL and parse the result page
var update = function(count, url) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
parseResponse(count, url, xhr.responseText);
}
}
xhr.onerror = function(error) {
var msg = "!>: " + count + ": error ";
postMessage(msg);
}
var url = "http://www.hotgrog.com"; // for testing (manifest has permissions for this url)
xhr.open("GET", url, true);
xhr.send();
postMessage(url);
}
【问题讨论】:
-
您确定需要并行解析吗?我感觉 99% 的时间会花在请求页面上,而 1% 会花在解析上。在这种情况下,工人并不是真的有用。 Ajax 请求已经是异步的,因此无论您是否将它们放入工作程序中,它都不会改变任何东西 - 您将遇到完全相同的网络限制。
-
是的,所以如果我不使用单独的工作人员,我会问在 Chrome 中可以同时发生多少个 XmlHttpRequest?
-
我猜,在你链接的那个问题中已经回答了(从顶部开始的第二个答案)。
标签: concurrency xmlhttprequest google-chrome-extension web-worker