2009-06-28 13 views
12

¿Hay alguna manera de detectar si una computadora es lenta y no ejecutar algún código (desactivando las animaciones de jQuery o simplemente ejecutando una función si es rápido)?Omita un código si la computadora es lenta

Sé que esta pregunta es probablemente muy trivial, pero noté que en algunas computadoras más lentas incluso la animación de margen más simple para mover algo se hace en flashes que no se ven muy bien.

Actualización:
El código que intento ejecutar es simplemente un montón de animaciones; todos toman la misma cantidad de tiempo, pero en navegadores más lentos, la animación se segmenta como lo que ves cuando ves un video que está almacenado en el búfer.

Respuesta

11

Al ejecutar javascript, no puede permitirse el lujo de conocer el rendimiento del equipo de destino de antemano. Lo único que se me ocurre es ejecutar una función haciendo algunos cálculos y midiendo el tiempo empleado. La función debe hacer un número suficiente de cálculos para asegurarse de que el tiempo necesario para ejecutar es representativo del rendimiento de la máquina.

En general, desaconsejaría realizar una prueba de rendimiento de este tipo, ya que requiere recursos en la máquina de destino, algo que a los usuarios generalmente no les gusta. Pero tal vez podría medir el tiempo necesario para completar la primera animación, y si es demasiado lenta, deshabilite las siguientes.

+2

Una prueba de rendimiento realmente puede estar haciendo * como * la animación se reproduce y utiliza (virtualmente) ningún recurso adicional. No veo una razón por la que no, cuando puede obtener una prueba bastante efectiva para la capacidad de respuesta casi gratis. ¡El hecho de que la animación esté usando mucho tiempo de cómputo para la computadora probablemente sea más irritante para el usuario! – Noldorin

5

Creo que hay dos opciones:

  1. que el usuario decida - dar una opción de 'ancho de banda bajo/bajo especificación' para el usuario, que cuando se hace clic se mostrará la versión más sencilla del sitio.

  2. Trate de detectar máquinas lentas; podría intentar detectar una máquina lenta mediante el uso de un script de tiempo de espera; si la animación/carga no se completa en un tiempo determinado, cambie a la versión más simple del sitio. La desventaja de este método es que no tiene idea de por qué se agotó el tiempo de espera del script, quizás fue una mala conexión o el usuario estaba cargando algo más al mismo tiempo que desaceleraba temporalmente su máquina.

Espero que esto te dé algunas ideas.

Josh

7

La solución más sencilla sería la de dejar en manos del usuario con una casilla de verificación, pero de otra forma se podría tratar de sincronización la primera animación de una computadora y luego si se supera un cierto límite de tiempo, las animaciones restantes se apagan ... por ejemplo ...

var start = new Date(); 
//... some jQuery animation 
var end = new Date(); 
var diff = end - start; 

entonces, por ejemplo, si la animación debe tener 1,5 segundos, y la diferencia de tiempo es como 5 segundos, y luego apagar las animaciones restantes.

+0

solo para aclarar, las 2 últimas líneas deben ejecutarse después de que se realiza la animación, es decir, en la devolución de llamada de la animación. – Smokie

0

Dado que JavaScript se ejecuta en un entorno de confianza parcial, no creo que pueda obtener ninguna información de nivel de sistema operativo.

Lo mejor que puedes hacer realmente es poner a prueba la "capacidad de respuesta". Un posible enfoque sería simplemente comenzar a reproducir la animación completa y detectar el retraso comparando la velocidad de fotogramas del objetivo con la velocidad de fotogramas "real". Simplemente puede omitir partes de la animación (código) para reducir el tiempo de cálculo y así mejorar la capacidad de respuesta/velocidad de fotogramas en consecuencia. Esto es esencialmente la cantidad de juegos de escritorio que detectan lag y, por lo tanto, reducen la complejidad de las animaciones.No puedo garantizar que funcione igual de bien en el navegador con JavaScript, pero vale la pena probarlo.

1

Me gustaría señalar que si va a dejarlo en manos del usuario (que creo que es una buena idea), debe dejar en claro que está preguntando sobre la velocidad de la computadora, no la velocidad de conexión o ancho de banda Un usuario puede tener una computadora portátil muy rápida, pero trabajando en una conexión de conexión inalámbrica a internet lenta, o viceversa. Como Javascript es del lado del cliente, lo único que importa es la velocidad de la computadora.

+0

Esto no es realmente una respuesta, pero lo estoy votando de todos modos, porque es un punto importante que las respuestas más populares parecen descuidar. –

0

Supongo que el código que desea apagar requiere una cantidad de tiempo significativa para ejecutarse.

que sugerimos que:

  • de comenzar a ejecutar este código
  • Después de que se ejecute parcialmente, ver cuánto tiempo real ha ellapsed
  • Si ha ellapsed demasiado tiempo real (es decir, si el código se está ejecutando muy lentamente) luego cancele la ejecución en lugar de terminarla.
Cuestiones relacionadas