ПРОБЛЕМА
Я обнаружил, что существует ограничение на количество веб-работников, которое может быть создано браузером.
Пример
основной HTML/JavaScript
<script type="text/javascript">
$(document).ready(function(){
var workers = new Array();
var worker_index = 0;
for (var i=0; i < 25; i++) {
workers[worker_index] = new Worker('test.worker.js');
workers[worker_index].onmessage = function(event) {
$("#debug").append('worker.onmessage i = ' + event.data + "<br>");
};
workers[worker_index].postMessage(i); // start the worker.
worker_index++;
}
});
</head>
<body>
<div id="debug">
</div>
test.worker.js
self.onmessage = function(event) {
var i = event.data;
self.postMessage(i);
};
При использовании Firefox генерируется только 20 строк вывода (версия 14.0.1, Windows 7).
Вопрос
Есть ли способ обойти это? Единственные две идеи, о которых я могу думать, следующие:
1) Розыгрыш, связанный с веб-работниками, т.е. создание каждого веб-рабочего, появляющегося на следующей странице
Пример:
<script type="text/javascript">
$(document).ready(function(){
createWorker(0);
});
function createWorker(i) {
var worker = new Worker('test.worker.js');
worker.onmessage = function(event) {
var index = event.data;
$("#debug").append('worker.onmessage i = ' + index + "<br>");
if ( index < 25) {
index++;
createWorker(index);
}
};
worker.postMessage(i); // start the worker.
}
</script>
</head>
<body>
<div id="debug"></div>
2) Ограничьте число веб-работников конечным числом и измените мой код, чтобы работать с этим лимитом (т.е. делиться рабочей нагрузкой через конечное число веб-работников) - примерно так: http://www.smartjava.org/content/html5-easily-parallelize-jobs-using-web-workers-and-threadpool
К сожалению, # 1, похоже, не работает (только конечное число веб-работников будет порождено при загрузке страницы). Есть ли другие решения, которые я должен рассмотреть?