Estoy pensando en utilizar Web Workers para proporcionar algunas funciones en segundo plano mientras un usuario está navegando en mi sitio web (para eso están los Web Workers, ¿no?). Sin embargo, no quiero arriesgarme a comprometer la experiencia del usuario al causar desplazamientos laggy, controles que no responden, etc. Los Web Workers se asignan a los hilos del SO, por lo tanto, esperaría cierto control sobre la prioridad de estos hilos, sin embargo, como sé, no existe tal cosa en la API actual. ¿Sabes cómo lograr esto? Incluso con un truco?¿Hay alguna manera de establecer un Trabajador web como de baja prioridad?
Respuesta
Bueno, no hay una llamada API para controlar detalles de bajo nivel como este. Sin embargo, creo que primero debe implementar lo que desea hacer y luego probar si el rendimiento alcanzado es demasiado grande en la experiencia del usuario. Supongo que, dado que no agregaron un control preciso sobre cómo se ejecutan los subprocesos, es probable que estén bien gestionados por la implementación subyacente.
¿Incluso con un truco? [...] el usuario sube una fotografía y el trabajador aplica un Photoshop-como filtro a la misma, lo cual es bastante intensivo de la CPU, entonces el trabajador avisa el hilo principal
Aquí hay un truco.
Reduzca la velocidad de su código. Algo como esto es lo que estoy utilizando 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 cuánto tiempo puede permitirse el lujo de aumentar es el momento. Una cosa buena de hacerlo de esta manera es que puede aceptar pausas y cancelar solicitudes entre iteraciones.
- 1. ¿Hay alguna manera de establecer la prioridad de carga de las imágenes en un sitio?
- 2. ¿Hay alguna manera de establecer la prioridad del subproceso en segundo plano utilizado por un SwingWorker?
- 3. ¿Hay alguna manera de acelerar Jsoup.parse()?
- 4. ¿Hay alguna manera de establecer nuevos valores predeterminados para ggsave?
- 5. ¿Hay alguna manera de establecer programáticamente el ApartmentState en STA?
- 6. Posible ejecutar el programa OpenCL con baja prioridad (ser "agradable")?
- 7. ¿Cómo iniciar desde Eclipse en baja prioridad en Windows?
- 8. ¿Hay alguna manera de negar un predicado?
- 9. ¿Hay alguna manera de depurar aplicaciones web usando Eclipse?
- 10. Diferencia entre un hilo de utilidad y un hilo de baja prioridad
- 11. E/S de baja prioridad en OS X
- 12. Analizando XML en un Trabajador Web
- 13. ¿Cómo inicio un proceso con baja prioridad? C#
- 14. PHP: ¿hay alguna manera de ver caracteres "invisibles" como \ n
- 15. ¿Hay alguna manera de hacer algo como esto en C#?
- 16. ¿Hay alguna manera de pasar métodos como bloques?
- 17. ¿Hay alguna manera de cambiar el propietario de un JDialog?
- 18. ¿Hay alguna manera de establecer un contador en una iteración de bigote?
- 19. ¿Hay alguna manera de incrustar un script de fuente web de Google en un archivo SVG?
- 20. ¿Hay alguna manera de establecer el valor de $? en un simulacro en Ruby?
- 21. ¿Hay alguna manera de dibujar un CGContextDrawRadialGradient como un óvalo en lugar de un círculo perfecto?
- 22. ¿Hay alguna manera de establecer el tiempo de espera de respuesta para Indy Tidhttp?
- 23. ¿Hay alguna manera de establecer el CommandArgument de un botón asp.net en javascript?
- 24. ¿Hay alguna manera de establecer múltiples valores predeterminados en un dict de Python usando otro dict?
- 25. ¿Hay alguna manera de establecer la barra de desplazamiento vertical para un div?
- 26. Trabajador web y escalado de imágenes
- 27. heroku: "no hay ningún tipo de trabajador"
- 28. ¿Hay alguna manera de ocultar texto en un TextView?
- 29. ¿Hay alguna manera de abatir un AutoBean de GWT?
- 30. ¿Hay alguna manera de no enviar un formulario web completo al hacer clic en un botón?
¿En qué plataforma y lenguaje? – rene
¿Para qué tipo de tarea pretendes utilizar a los trabajadores de la web? Actividad periódica? ¿Una sola ejecución de una tarea? – Tudor
@Tudor Diría ejecución por única vez (por ejemplo, el usuario carga una fotografía y el trabajador aplica un filtro similar a Photoshop, que consume bastante CPU, luego el trabajador alerta el hilo principal). – tunnuz