2013-10-23 19 views
5

Ich habe eine $ .ajax Anfrage und speichere die Startzeit und Endzeit (mit new Date().getMilliseconds()). Ich sehe ein komisches Ereignis, wo ich manchmal startTime von endTime subtrahiere und eine negative Zahl bekomme.Messung der AJAX Ladezeit

(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?! 
     } 
    }); 
})(); 

Könnte jemand bitte dies erklären? Ich bin mir sicher, dass es abgesehen von einem Riss im Raum-Zeit-Kontinuum eine logische Erklärung gibt.

(Wenn es ein besserer Weg, dies zu messen, das wäre auch dankbar!)

+0

Was passiert, wenn Sie 'startTime' in den Handler' beforeSend' setzen? Und bekommt nichtmilliseconds nur eine Zahl zwischen 0 und 999? – greener

+1

Was passiert, wenn Sie 'cache: false' in den Optionen setzen? – Barmar

+1

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

Antwort

8

.getMilliseconds gibt die Millisekunden Teil der Zeit, wenn Sie das Date Objekt erstellt. In 50% Ihrer Vergleiche ist der Anteil also höher oder niedriger als bei jedem anderen Date-Objekt.

Was Sie wollen, ist new Date().getTime(), die absolute Millisekunden zurück, da die Unix-Epoche im Jahre 1970 begann

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 ); 

So versuchen, mit:

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 sagt:

getMillisecondsDer von getMilliseconds zurückgegebene Wert ist eine Zahl zwischen 0 und 999.

5

Diese oft negativ sein wird (etwa die Hälfte der Zeit), da dies nicht die Anzahl der Millisekunden bekommen, da die Epoche (1.1.1970). Dies ist eher die Anzahl der Millisekunden der aktuellen Datumszeit. Wenn also 400 Millisekunden seit der letzten Sekunde verstrichen sind, erhalten Sie 400 ... wenn 800 Millisekunden seit der letzten Sekunde vergangen sind, erhalten Sie 800.

Die gesuchte Funktion ist: new Date(). getTime()

+0

genial, danke für die Erklärung! –