paginas - que es javascript y para que sirve
¿Cuál es la mejor manera de determinar en tiempo de ejecución si un navegador es demasiado lento para manejar de manera elegante JavaScript/CSS complejo? (6)
Estoy jugando con la idea de habilitar / deshabilitar progresivamente los efectos de JavaScript (y CSS) en una página, dependiendo de qué tan rápido / lento parezca el navegador.
Estoy pensando específicamente en dispositivos móviles de baja potencia y computadoras de escritorio viejas, no solo IE6 :-)
¿Hay algún ejemplo de este tipo de cosas que se hacen?
¿Cuáles serían las mejores formas de medir esto? ¿Contando cosas, como ralentizaciones temporales en CPU ocupadas?
Notas:
- No estoy interesado en la detección de navegador / sistema operativo.
- Por el momento, no me interesan las medidas de ancho de banda, solo el rendimiento de navegador / CPU.
- Cosas que pueden ser interesantes de medir:
- Base de JavaScript
- Manipulación DOM
- Representación DOM / CSS
- Me gustaría hacer esto de una manera que afecte la velocidad de renderizado de la página lo menos posible.
Por cierto: para no confundir / irritar a los usuarios con un comportamiento incoherente, esto requeriría, por supuesto, notificaciones en pantalla para que los usuarios puedan participar de este proceso de ajuste del rendimiento.
[ Actualización : hay una pregunta relacionada que eché de menos: Deshabilitar la función de JavaScript en función del rendimiento de la computadora del usuario . Gracias Andrioid !]
Eche un vistazo a algunos de los puntos de referencia de Google (con derechos de autor!) Para V8 :
Elegí un par de las más simples para dar una idea de los puntos de referencia similares que podría crear usted mismo para probar conjuntos de características. Siempre que mantenga el tiempo de ejecución de las pruebas entre el tiempo registrado al inicio y el tiempo registrado al finalizar en menos de 100 ms en los sistemas más lentos (que estas pruebas de Google son mucho mayores que) debe obtener la información que necesita sin ser perjudicial para la experiencia del usuario. Si bien los puntos de referencia de Google se preocupan por la granularidad entre los sistemas más rápidos, no es así. Todo lo que necesita saber es qué sistemas tardan más de XX ms en completarse.
Las cosas que podría probar son operaciones de expresión regular (similar a la anterior), concatenación de cadenas, desplazamiento de página, cualquier cosa que provoque que el navegador vuelva a pintar o refluir, etc.
No es que sea un aguafiestas aquí, pero esta no es una hazaña actualmente posible de ninguna manera significativa en mi opinión.
Hay varias razones para esto, las principales son:
Cualquier medida que realice, si tiene algún significado, deberá probar el potencial máximo del navegador / CPU, lo cual no puede hacer y mantener ningún tipo de experiencia razonable del usuario.
Incluso si pudiera, sería una instantánea sin sentido ya que no tiene idea de qué tipo de carga tiene la CPU de otras aplicaciones distintas del navegador mientras se ejecuta la prueba, y si esa situación continuará mientras el usuario visita su computadora. sitio web.
Incluso si pudieras hacer eso, cada navegador tiene sus propias fortalezas y debilidades, lo que significa que deberías probar cada función de manipulación del dom para saber qué tan rápido el navegador la completaría, no hay "general" o "promedio" que tiene sentido aquí en mi experiencia, y aunque existiera, la velocidad con la que se ejecutan los comandos de dom manipulación se basa en el contexto de lo que está actualmente en el dom, que cambia cuando lo manipulas.
Lo mejor que puedes hacer es o bien
Deje que los usuarios decidan lo que quieren y permita que cambien fácilmente esa decisión si lo lamentan
o mejor aún
Elija darles algo de lo que pueda estar razonablemente seguro de que la mayor parte de su público objetivo podrá disfrutar.
Un poco fuera de tema, pero siguiendo esta línea de pensamiento: si tus usuarios no son líderes tecnológicos en sus círculos sociales (como la mayoría de los usuarios aquí lo son, pero la mayoría de las personas en el mundo no) no les das demasiadas opciones, es decir. cualquier elección que no sea absolutamente necesaria: no la quieren y no comprenden las consecuencias técnicas de su decisión antes de que sea demasiado tarde.
Podría intentar sincronizar algunas operaciones básicas: eche un vistazo a los Episodios de Steve Souder y al Bumerán de Yahoo para encontrar buenas formas de sincronizar las cosas con la vista de frente. Sin embargo, será bastante complicado determinar cómo se relacionan las métricas con un nivel aceptable de rendimiento / una experiencia de usuario gratificante.
Si va a proporcionar una interfaz de usuario para que los usuarios puedan optar por no participar, ¿por qué no dejar que el usuario elija el nivel de atractivo visual en la aplicación frente a la velocidad de reproducción?
Puede ejecutar todos los puntos de referencia que desee utilizando Web Workers, luego, de acuerdo con los resultados, almacene su detección sobre el rendimiento de la máquina en una cookie. Esto es solo para HTML5 Navegadores compatibles, por supuesto
Un enfoque diferente, que no necesita un punto de referencia explícito, sería habilitar funcionalidades progresivamente.
Puede aplicar funciones en orden prioritario, y después de cada una, descarte el resto si ha pasado una cierta cantidad de tiempo.
Asegurándose de que las características más caras sean las últimas, presentaría al usuario una selección de funciones adecuada en función de la velocidad del navegador.
Algunas ideas:
- Poner un límite de tiempo en las pruebas parece una opción obvia.
- Almacenar los resultados de las pruebas en una cookie también parece obvio.
- Un bajo rendimiento de la prueba en una prueba podría poner en pausa otras secuencias de comandos
- y desencadenar la visualización de una IU de solicitud de no bloqueo (como las indicaciones de guardar contraseña comunes en los navegadores web modernos)
- que pregunta al usuario si desea optar por más efectos de scripting y almacena la respuesta en una cookie.
- mientras el usuario no ha respondido a la solicitud, periódicamente repita las pruebas y acepte automáticamente la solicitud de scripting si las pruebas consecutivas finalizan más rápido que la primera.
.
- En una nota al margen: velocidades de red lentas probablemente también podrían ser probadas
- al sincronizar la descarga de recursos externos (como las páginas poseen archivos CSS o JavaScript)
- y comparando ese resultado con los resultados del benchmark de JavaScript.
- esto puede ser útil en sitios que dependen de cargas de efectos XHR y / o uso intensivo de
<img/>
s.
.
- Parece que los puntos de referencia de representación / manipulación de DOM son difíciles de realizar antes de que la página haya empezado a renderizarse, y es probable que causen retrasos bastante notables para todos los usuarios.