Даже со взломом?[...] пользователь загружает фотографию, и рабочий применяет к ней фильтр, похожий на Photoshop, который сильно загружает процессор, затем рабочий предупреждает основной поток
Вот хак.
Замедли свой код.Примерно так я сейчас и использую для симуляции частиц:
var TIME_STEP = 10,
paused = false,
state; // set by commands.start()
function main_loop () {
if (paused) {
return;
}
// update state incrementally. Break your process into chunks
// for example pixels or rows of pixels
state = ____________;
// send state or progress to main thread
if (finished) {
self.postMessage(state);
} else {
self.postMessage(progress);
}
setTimeout(main_loop, TIME_STEP);
}
var commands = {
//...functions that can be called from main thread (pause/start/cancel/etc)...
};
function message_handler (event) {
var data = event.data;
var command = commands[data.command];
command.apply(this, data.args);
}
self.addEventListener('message', message_handler, false);
TIME_STEP
- это время между вычислениями, и оно должно быть разным в зависимости от того, что вы делаете и как долго вы можете позволить себе увеличитьпора.Хорошая вещь в этом заключается в том, что вы можете принимать запросы на паузу и отмену между итерациями.