2010-03-19 13 views
15

Estoy trabajando en una aplicación web en jquery que, en máquinas antiguas o sin muchos recursos, puede tener un bajo rendimiento. Para evitar esto, me gustaría crear una versión degradada que desactive algunas de las características, especialmente aquellas que dependen de imágenes grandes.Detectando cuando Javascript tiene un bajo rendimiento

¿Cómo puedo saber si mi aplicación está funcionando mal en la computadora del usuario en jquery o javascript en general? Solo necesito una forma de llamar a una función que degradará la aplicación. (especialmente cuando el usuario puede quedarse sin memoria del sistema)

La única forma en que puedo pensar es en la intervención manual del usuario, pero la opción agregará desorden para los usuarios que no la necesitan y los usuarios que la necesiten no lo nota

Gracias!

Respuesta

5

No hay manera de saber antes de que su Javascript comienza a funcionar. Se podría dispersar algunos objetos de perfiles de fecha alrededor de este modo:

var timeTaken; 
var start = +new Date(); // cast right now to a number 

for (i = 0; i < 1000000000; i++) // Some seriously intensive loop 
{ 
    // ... 
} 

timeTaken = (+new Date()) - start; // calculate the total time taken 

if (timeTaken > 500) // if time taken is longer than 500ms 
    switchToBasic(); 

Hay que tener en cuenta que hay otras cosas que pueden afectar el rendimiento de un navegador. Si un usuario ya estaba haciendo algunas operaciones intensivas de la CPU, esto podría hacer que su máquina cambie al modo básico incluso si tiene una computadora bastante capaz.

+0

Gracias por la respuesta. Puedo ver dónde podría haber otros factores que afecten el rendimiento, por lo que si ver las marcas de tiempo es la única forma de hacerlo, entonces tendré que hacer que la función degradar simplemente solicite al usuario. Tener que degradarse automáticamente en una máquina capaz podría ser molesto para algunos. –

+0

Cuando tiene una declaración como "¿Cómo puedo saber si mi aplicación se está ejecutando mal en la compilación del usuario ...", no importa cómo se realiza el control. En una máquina "capaz" fuertemente estresada, tendrá un mal rendimiento. –

+0

@Dan McG: pero ese mal desempeño solo puede ser temporal. Para cuando la máquina termina es otra tarea intensiva de la CPU, es demasiado tarde. Está listo y dispuesto a ir, pero ya has paralizado tu aplicación. –

0

¿Podría simplemente codificar una función de JavaScript que ejecute una prueba controlada, cronometrando el resultado, y luego usar esto como base para degradar el sitio?

Tal vez una versión más pequeña de una de las pruebas de cada SunSpider, por ejemplo

+0

Pensé en esto en realidad. Prefiero no tener el retraso antes de que comience la aplicación (aunque supongo que no será el fin del mundo). –

0

Como dicen los demás, ejecute pruebas de cálculo controladas y mida cuánto tiempo toman. Pero en lugar de hacerlo solo una vez, haz una serie de pruebas cortas. Si ocurre incluso uno tiempo de cada diez que obtiene un resultado rápido, sabe tiene una máquina rápida.

La máquina rápida puede haber sido abatida por otras tareas, pero una máquina lenta no puede volverse repentinamente rápida por un tiempo.

Dependiendo de su aplicación, también puede agregar sugerencias para que el usuario pueda encontrar un navegador más rápido. Los navegadores con compilación JIT de Javascript son mucho más rápidos.

1

Si realmente necesita estar seguro de que funciona en computadoras de gama baja (y no tiene ninguna computadora vieja por ahí), ¿por qué no prueba usando una máquina virtual, como VirtualBox o similar? Al ejecutar un sistema operativo dentro de una virtualbox, en realidad puede ralentizarlo mucho, simulando hardware más lento. Estoy máquinas virtuales más bastante seguro le permiten ajustar la rapidez con la CPU virtual es ...


En cuanto a la detección automática de cuando el cliente es un equipo lento, no estoy seguro de que puede detectar de forma fiable eso, sin agregar pruebas que ralentiza aún más la máquina.

Sugiero que empiece con la creación de un enlace en algún lugar que le permita al usuario activar el "modo lento de la computadora". De esta forma, los usuarios de pacientes con computadoras lentas pueden sentarse y esperar mucho para obtener las características sofisticadas si lo desean o pueden apagarlas si están impacientes. Esto es mucho más fácil de implementar, y es posible que los probadores/usuarios estén realmente satisfechos con esa solución ...:)

Si decide hacer alguna autodetección, también debe tener una anulación manual, es realmente molesto que se le brinden datos simplificados porque una autodetección ha fallado, sin la opción de cambiarla.

0

¿Ya ha hecho todo lo posible para que la aplicación sea más rápida?

Por ejemplo, puede ejecutar la aplicación a través del generador de perfiles Firebug y examinar el rendimiento de todo el sistema utilizando YSlow.

0

Gmail muestra una barra de carga, con un enlace "cambiar a solo HTML". Podrías probar algo en esa línea. (Además, si lleva mucho tiempo cargar, el enlace "cambiar a solo HTML" se vuelve más prominente. Aparece en el medio de la pantalla.)

0

Puede configurar un temporizador para mostrar un cuadro de diálogo que permite al usuario cambiar al modo básico. showSlowDialog no detendría el proceso de la operación lenta ya que se está ejecutando en un hilo diferente (se ejecuta simultáneamente).

function showSlowDialog() { 
    if(confirm("switch to slow?")) { 
     switchToSlow(); 
    } 
} 

var timer = setTimeout("showSlowDialog()", 5000); // show dialog in 5 seconds 
SomeSlowishOperationThatMayOrMayNotTakeSomeTime(); // do long operation 
clearTimeout(timer); // clear timer. 
Cuestiones relacionadas