2013-10-23 12 views
5

Ho una richiesta $ .ajax e sto salvando l'ora di inizio e l'ora di fine (utilizzando new Date().getMilliseconds()). Vedo un evento strano in cui a volte sottraggo startTime da endTime e ottengo un numero negativo.misurazione tempo caricamento ajax

(function(){ 
    var startTime = new Date().getMilliseconds(); 
    $.ajax({ 
     url:"/url.php", 
     data: someObject, 
     method: "POST", 
     complete:function(r){ 
      var endTime = new Date().getMilliseconds(); 
      console.log(endTime - startTime); // sometimes negative?! 
     } 
    }); 
})(); 

Qualcuno potrebbe spiegarlo? Sono sicuro che c'è una spiegazione logica oltre a uno strappo nel continuum spazio-temporale.

(Se c'è un modo migliore per misurare questo, che sarebbe apprezzato anche!)

+0

cosa succede se metti 'startTime' nel gestore' beforeSend'? E i getmilliseconds non ti danno solo un numero compreso tra 0 e 999? – greener

+1

Cosa succede se metti 'cache: false' nelle opzioni? – Barmar

+1

@d -_- b vedere http://stackoverflow.com/questions/221294/how-do-you-get-a-timestamp-in-javascript – greener

risposta

8

.getMilliseconds restituisce i millisecondi porzione del tempo in cui è stato creato l'oggetto Date. Quindi nel 50% dei tuoi confronti la parte sarà superiore o inferiore a quella di qualsiasi altro oggetto Date.

Quello che vuoi è new Date().getTime(), che restituisce assoluti millisecondi dall'epoca Unix ha avuto inizio nel 1970.

2

A little test says:

var date  = new Date(); 
var systemMS = date.getMilliseconds(); 
var timeMS = date.getTime(); 


alert('Currently your clock is at ms : '+ systemMS); 
alert('"ms" since 1 January, 1970 UTC. : '+ timeMS ); 

Così provi con:

var start = new Date().getTime(); // note getTime() 
$.ajax({ 
    url  :"/url.php", 
    data : someObject, 
    method : "POST", 
    cache : false,    // prevent caching response 
    complete: function(){ 
     var end = new Date().getTime(); 
     console.log(end - start); 
    } 
}); 

MDN dice:

getMillisecondsIl valore restituito da getMilliseconds è un numero compreso tra 0 e 999.

5

Questo sarà spesso negativo (circa la metà del tempo), in quanto questo non è sempre il numero di millisecondi dal momento che la epoca (1/1/1970). Questo è piuttosto ottenere il numero di millisecondi della data corrente. Quindi se sono trascorsi 400 millisecondi dall'ultimo secondo, otterrai 400 ... se sono trascorsi 800 millisecondi dall'ultimo secondo, riceverai 800.

La funzione che stai cercando è: nuova Data(). getTime()

+0

fantastico, grazie per la spiegazione! –

Problemi correlati