Я имею в виду использование веб-работников для обеспечения некоторых фоновых функций, когда пользователь просматривает мой сайт (для чего предназначены веб-работники, верно?). Тем не менее, я не хочу рисковать скомпрометировать пользовательский интерфейс, вызывая лагги-прокрутку, не реагирующие элементы управления и т.д. Веб-рабочие отображаются в потоках ОС, поэтому я ожидал бы некоторого контроля над приоритетом этих потоков, однако как я знаю, в текущем API нет такой вещи. Знаете ли вы, как это сделать? Даже с взломом?
Есть ли способ установить для Web Worker низкий приоритет?
Ответ 1
Ну, нет API-вызовов для управления низкоуровневыми данными вроде этого. Тем не менее, я думаю, вы должны сначала реализовать то, что хотите, а затем проверить, слишком ли высока производительность при работе с пользователем. Я предполагаю, что, поскольку они не добавляли тонкий контроль над тем, как выполняются потоки, они, вероятно, хорошо управляются базовой реализацией.
Ответ 2
Даже с взломом? [...] пользователь загружает фотографию, а рабочий применяет 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
- время между вычислениями и должно быть различным в зависимости от того, что вы делаете, и как долго вы можете позволить себе увеличить его время. Одна из хороших вещей в этом заключается в том, что вы можете принимать паузу и отменить запросы между итерациями.