2011-09-06 40 views
9

Tengo funciones jQuery; Por ejemplo, A(), B() y C() Cada función realiza algunas llamadas Ajax a diferentes sitios.¿Cómo puedo calcular cuánto tiempo tarda una función en jQuery?

Quiero calcular cuánto tiempo lleva ejecutar cada función (supongo en milisegundos) Solo quiero probar mi código en loops largos y en diferentes navegadores modernos (Safari/Chrome/IE10/Mozilla). Más específicamente, quiero calcular cuánto tiempo lleva tomar una devolución de llamada de cada solicitud de Ajax (¿este es también el momento en que la función termina bien?) ¿Cómo puedo lograr esto?

+0

No, el tiempo que una función finaliza no es el mismo tiempo que se activa una devolución de llamada, a menos que esté utilizando llamadas AJAX sincrónicas. – icktoofay

+0

muchos navegadores tienen herramientas de desarrollo web que controlarán sus solicitudes de AJAX y le dirán cuánto tiempo tomaron. –

+0

Establezca una variable igual al tiempo de la llamada Ajax y luego en la función de devolución de llamada compare esa variable con la hora actual. – nnnnnn

Respuesta

18

Puede obtener el tiempo en milisegundos desde el objeto de fecha.

var start = new Date().getTime(); 

A(); 

function AJAXSuccessFunction() { 
    console.log(new Date().getTime() - start); 
} 
6
//set start point anywhere you want 
var start = new Date(); 
//when done, 
var end = new Date(); 

//to profile milliseconds, just do 
var duration = end - start; 
3

Nowadays, puede utilizar perfomance.now(). Esta función usa el atributo navigationStart como hora de inicio;

Este atributo debe devolver la hora inmediatamente después de que el agente de usuario termine de solicitar la descarga del documento anterior. Si no hay documento anterior , este atributo debe devolver el mismo valor que fetchStart.

En cuanto a un ejemplo de código de la vida real:

// Store the start 
var start = performance.now(); 

// Do some operation 
for(var i=0; i < 1000; i++) { 
    var j = i*i; 
} 

// Profile the milliseconds it took to do the job 
var duration = (performance.now() - start); 
1

Ahora puede utilizar, console.time ('na1') y console.timeEnd ('na1')

Así que si están llamando a una función como doAwesomeStuff() y quiere ver cuánto tiempo se tarda en ejecutar que acaba de hacer,

console.time('fn1') 
doAwesomeStuff() 
console.timeEnd('fn1') 

na1 - puede ser cualquier cosa.

+0

Esto es lo que recomiendo. Esta es la manera más fácil de hacer tal sincronización. Sin embargo, la API de rendimiento también es bastante dulce. – frosty

0

Se puede utilizar con mayor precisión performance.now()

// Take a timestamp at the beginning. 
 
var start = performance.now(); 
 

 
// Execute the code being timed. 
 
console.log("your function is here") 
 

 
// Take a final timestamp. 
 
var end = performance.now(); 
 

 
// Calculate the time taken and output the result in the console 
 
console.log('doTasks took ' + (end - start) + ' milliseconds to execute.');

1

No sé si esto es lo que busca pero si quieres saber cuánto tiempo se dedicó a la tramitación de una función, puede usar DevTools de Chrome (o herramientas similares en otros navegadores) para comprobarlo.

Vaya a la página que desea examinar, abra DevTools, vaya a la pestaña Profiles y seleccione 'Recoger el perfil de la CPU Javascript' y pulse Start para comenzar a grabar.

Actualiza tu página y cuando se haya completado la carga, Stop la grabación. Obtendrá una lista de las funciones ejecutadas y el tiempo que pasó procesándola.

Sample Screenshot of Profiles Tab in Dev Tools

Espero que ayude.

Cuestiones relacionadas