Tengo una página que tiene operaciones bastante pesadas (en lugar de peso medio) canvas
pasando. Para atender a los usuarios en dispositivos móviles y computadoras antiguas, pensé que podría implementar un mecanismo que verificará si el elemento de lienzo es realmente visible y decidirá si los cálculos constantes y las actualizaciones de lienzo (animación a 30 fps) deben realizarse o no. .¿Los navegadores representan elementos de lienzo que no están dentro de la ventana gráfica?
Esto está trabajando muy bien, sin embargo, cuando se hace una prueba de funcionamiento con las herramientas de Chrome Dev me di cuenta de que incluso cuando desactivo mi cheque visibilidad y dejar que las cosas hacen que todo el tiempo del uso de la CPU de la función en cuestión cae un poco cuando ninguna parte del elemento (s) del lienzo es visible (aunque en teoría aún debería realizar las mismas tareas). Entonces: al menos en mi computadora con Chrome 17, no hay una diferencia real si verifico la visibilidad real del elemento.
Para resumir: ¿Tengo que hacer esto o soy navegadores lo suficientemente inteligentes como para manejar un caso así sin siquiera decirles (y puedo guardar la verificación de visibilidad)?
EDITAR:
así que hice un poco de "investigación" sobre este tema y construido this fiddle.
Lo que pasa es que simplemente genera ruido a 30 fotogramas por segundo. No es muy agradable a la vista, pero ... bueno, la parte superior es simplemente div
para bloquear la ventana gráfica. Cuando me desplazo hacia abajo y tengo el elemento canvas
en la ventana gráfica, el uso de la CPU me dice que está ocupando aproximadamente el 40%, por lo que aparentemente el navegador tiene bastante que hacer aquí. Cuando me desplazo hacia arriba para tener el color granate div
en mi ventana gráfica y el perfil del uso de la CPU, se reduce a un 10%. Cuando me desplazo hacia abajo, el uso vuelve a aumentar.
Así que cuando implemente un control de la visibilidad como en este modified fiddle, veo un aumento (uno pequeño para ser honesto) en el uso de la CPU en lugar de una gota (ya que tiene la tarea adicional de comprobar si el lienzo está dentro de la ventana gráfica).
Así que todavía me pregunto si esto es un efecto secundario de algo de lo que no estoy enterado (o estoy cometiendo un gran error al crear perfiles) o si puedo esperar que los navegadores sean lo suficientemente inteligentes como para manejar tales situaciones?
¡Si alguien pudiera arrojar algo de luz sobre eso estaría muy agradecido!
Guau, ¡muchas gracias por esa respuesta tan completa! He escuchado sobre 'requestAnimationFrame' antes, pero lo que siempre me molestó es que parece apuntar a que la animación se ejecute a 60 fps sin importar qué (lo que sí creo que se ve demasiado suave para muchos tipos de animación). La única forma de limitar esto que podía pensar una vez más incluía un 'setInterval' ... ¿Sabes si hay alguna forma de restringir/alterar eso? – m90
¿Demasiado suave? Nunca he oído hablar de una animación demasiado suave, ¿qué pasa con eso? : S – AshleysBrain
Puede sonar raro, pero tengo experiencia en animación clásica, así que realmente creo a 12 fps, pensando que esto ya es parte de mi cerebro. Mi objeción puede ser tonta en el 95% de los casos, pero en ciertos casos sería increíble tener más control. – m90