2011-03-03 70 views
13

Quiero medir cuánto tiempo lleva procesar la llamada AJAX. Tengo instalado y funcionando, pero no saben cómo codificar esto en JavaScript (JS solamente)medir el tiempo de procesamiento de la llamada AJAX

+0

estoy encontrando que el tiempo de respuesta es variada utilizando este método en particular si el sitio no se almacena en caché todavía. –

Respuesta

25
var start = new Date().getTime(); 
doAjax({ 
    success: function() { 
    var end = new Date().getTime(); 
    console.log('milliseconds passed', end - start); 
    } 
}); 

guardar un valor de tiempo antes de empezar a hacer cosas ajax, y luego hacerlo de nuevo cuando termine. Luego resta una forma de la otra y obtén tu tiempo.

+1

Solución agradable y simple. – FarligOpptreden

+0

@Alex, ¿alguna idea sobre por qué sería diferente de la de Firebug por 30-60 ms? Gracias – Adi

+0

Probablemente porque cualquier biblioteca ajax que esté utilizando (como jQuery) ejecuta código después de que se recibe la respuesta, pero antes de que se ejecute la devolución de llamada. Firebug probablemente solo mide el tiempo HTTP. La discrepancia es probable solo la sobrecarga de la biblioteca. –

3

Esto no dará tiempos precisos porque javascript usa un event queue. Esto significa que su programa puede ejecutar la siguiente manera:

solicitud
  • inicio AJAX
  • manejar un clic del ratón evento/cualquier otra línea de espera a la espera de su código mientras
  • manejar la respuesta preparada AJAX
de inicio

Lamentablemente, no hay forma de obtener la hora en que el evento se agregó a la cola hasta donde yo sé. Event.timeStamp devuelve la hora en que se sacó el evento de la cola, consulte este violín: http://jsfiddle.net/mSg55/.

HTML:

<a href="#">link</a> 
<div></div> 

Javascript:

$(function() { 
    var startTime = new Date(); 
    $('a').click(function(e) { 
     var endTime = new Date(e.timeStamp); 
     $('div').append((endTime - startTime) + " "); 
     //produce some heavy load to block other waiting events 
     var q = Math.PI; 
     for(var j=0; j<1000000; j++) 
     { 
      q *= Math.acos(j); 
     } 
    }); 

    //fire some events 'simultaneously' 
    for(var i=0; i<10; i++) { 
     $('a').click(); 
    } 
}); 
+0

¿Se supone que esto es un comentario sobre la respuesta de @ AlexWayne? – Bergi

Cuestiones relacionadas