2011-03-03 72 views
13

我想測量需要多長時間來處理 AJAX調用。我有它運行起來,但不知道如何在JavaScript代碼本(僅爵士)測量AJAX調用的處理時間

+0

我發現,響應時間使用這種方法特別是如果網站尚未緩存變化。 – 2012-03-06 17:19:47

回答

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

節省了時間價值,你開始做AJAX的東西之前,然後再做一次,當它完成。然後減去另一個表格並獲得時間。

+1

好的,簡單的解決方案。 – FarligOpptreden 2011-03-03 06:35:11

+0

@Alex,爲什麼這和Firebug中的那個不同30-60毫秒?謝謝 – Adi 2012-07-31 15:53:34

+0

可能是因爲你使用的任何ajax庫(如jQuery)在收到響應之後,但在執行回調之前運行代碼。 Firebug很可能只測量HTTP時間。這種差異可能只是圖書館的開銷。 – 2012-07-31 19:32:50

3

由於javascript使用event queue,因此無法給出準確的時間。這意味着你的程序可以執行這樣的:

  • 開始AJAX請求
  • 處理等待鼠標點擊事件/任何其他等待的代碼行其間
  • 開始處理AJAX準備響應

不幸的是,據我所知,沒有辦法讓事件被添加到隊列中。 Event.timeStamp返回事件從隊列中彈出的時間,請參閱此小提琴: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

這應該是@ AlexWayne的答案的評論? – Bergi 2014-07-03 11:11:33