2013-10-23 26 views
5

Tôi có yêu cầu $ .ajax và đang tiết kiệm thời gian bắt đầu và thời gian kết thúc (sử dụng new Date().getMilliseconds()). Tôi thấy một sự xuất hiện kỳ ​​lạ, đôi khi tôi trừ startTime từ endTime và nhận số âm.đo thời gian tải 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?! 
     } 
    }); 
})(); 

Ai đó có thể giải thích điều này? Tôi chắc chắn có một lời giải thích hợp lý ngoài một phần trong thời gian không-thời gian.

(Nếu có một cách tốt hơn để đo này, mà muốn được đánh giá quá!)

+0

điều gì sẽ xảy ra nếu bạn đặt 'startTime' trong trình xử lý' beforeSend'? Và không getmilliseconds chỉ cung cấp cho bạn một số từ 0 đến 999? – greener

+1

Nếu bạn đặt 'cache: false' trong các tùy chọn thì sao? – Barmar

+1

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

Trả lời

8

.getMilliseconds trả về mili giây phần của thời gian khi bạn tạo ra các đối tượng Date. Vì vậy, trong 50% so sánh của bạn, phần sẽ cao hơn hoặc thấp hơn so với bất kỳ đối tượng Date nào khác.

gì bạn muốn là new Date().getTime(), mà trả về tuyệt đối mili giây kể từ khi kỷ nguyên Unix bắt đầu từ năm 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 ); 

Vì vậy, thử với:

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 nói:

getMillisecondsGiá trị trả về bởi getMilliseconds là một số giữa 0 và 999.

5

này thường sẽ âm (khoảng một nửa thời điểm đó), vì điều này là không nhận được số mili giây kể từ khi kỷ nguyên (1/1/1970). Điều này thay vì nhận được số mili giây của thời gian ngày hiện tại. Vì vậy, nếu 400 mili giây đã trôi qua kể từ giây cuối cùng, bạn sẽ nhận được 400 ... nếu 800 mili giây trôi qua kể từ giây cuối cùng, bạn sẽ nhận được 800.

Chức năng bạn đang tìm kiếm là: new Date(). getTime()

+0

tuyệt vời, cảm ơn lời giải thích! –

Các vấn đề liên quan