javascript - son - ¿Hay una manera de establecer un trabajador web a baja prioridad?
url optimizada seo (2)
Incluso con un hack? [...] el usuario carga una fotografía y el trabajador le aplica un filtro similar a Photoshop, que requiere bastante CPU, luego el trabajador alerta el hilo principal
Aquí hay un hack.
Reduzca la velocidad de su código. Algo como esto es lo que estoy usando actualmente para una simulación de partículas:
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
es el tiempo entre los cálculos y tendrá que ser diferente dependiendo de lo que esté haciendo y de cuánto tiempo pueda permitirse aumentar su tiempo. Una cosa buena de hacerlo de esta manera es que puede aceptar pausar y cancelar solicitudes entre iteraciones.
Estoy pensando en utilizar los Trabajadores Web para proporcionar alguna funcionalidad de fondo mientras un usuario navega por mi sitio web (para eso están los Trabajadores Web, ¿no?). Sin embargo, no quiero correr el riesgo de comprometer la experiencia del usuario al causar un desplazamiento lento, controles que no responden, etc. Los trabajadores web están asignados en subprocesos del sistema operativo, por lo que esperaría cierto control sobre la prioridad de estos subprocesos. como sé, no hay tal cosa en la API actual. ¿Sabes cómo lograr esto? Incluso con un hack?
Bueno, no hay una llamada a la API para controlar los detalles de bajo nivel como este. Sin embargo, creo que primero debe implementar lo que desea hacer y luego probar si el impacto de rendimiento es demasiado grande en la experiencia del usuario. Supongo que, dado que no agregaron un control preciso sobre cómo se ejecutan los subprocesos, probablemente estén bien administrados por la implementación subyacente.