Ознакомьтесь с HTML5 Rocks: Основы веб-работников для общего учебника.
- Рабочие начнут работать, как только вы вызовете метод
postMessage
рабочего.
- функция, связанная с
onmessage
работника в основном коде, будет работать, когда работник вызывает postMessage
.
- глобальные переменные не являются общими для основного и рабочего потоков. Единственный способ передачи данных - обмен сообщениями через
postMessage
.
- Как вы и подозревали,
onmessage
для кода работника и основного кода имеет одинаковое значение. Это обработчик события, когда поток получает событие сообщения. Вместо этого вы можете использовать addEventListener
, перехватывая событие message
:
Основной код:
function showResult(event) {
document.getElementById("result").textContent = event.data;
dump("Got: " + event.data + "\n");
}
var worker = new Worker("fibonacci.js");
worker.addEventListener('message', showResult, false);
Рабочий код:
addEventListener('message', resultReceiver, false);
Пример Фибоначчи, который вы взяли, является примером рекурсивного рабочего. Если не использовать рабочих, это было бы что-то вроде этого:
function fibonacci(n) {
if (n == 0 || n == 1) return n;
return fibonacci(n-1) + fibonacci(n-2);
}
var result = fibonacci(5);
dump("Got: " + result + "\n");
(о нет, я не собираюсь делать для вас стек без стека. Вы сами пишете!)