對於我的應用程序中的數據可視化請求,我向一個servlet發送多個AJAX請求以獲取數據的塊和每個請求的回調,接收到的數據被渲染地圖。計算多個異步請求的處理和請求時間
對於這個要求,我試圖計算:
- 請求時間(多少總時間把客戶端從服務器獲取數據)
- 處理時間(多少總所花費的時間客戶端呈現在客戶端的數據)
爲了做到這一點,我捕捉每個請求的開始時間將其發送到服務器(使用jQuery「beforeSend」)和每個請求「的onSuccess」事件之前,結束時間被捕獲。
一旦完成所有請求,我就會從上次請求的「結束時間」中扣除第一個請求的「開始時間」,以便計算客戶端從服務器獲取記錄所花費的總時間。 (類似於處理時間)
但不知何故,我的計算不會產生正確的結果。有沒有人可以就這個問題提供一些建議?
用於解釋更多更好的辦法,我的問題:
var dataProviderRequestsStartTime = [];
var dataProviderRequestsEndTime = [];
var dataParsingStartTime = [];
var dataParsingEndTime = [];
getResults(ids);
var getResults = function(totalIds) {
for(var i=0; i<10; i++;) {
requestResultForOneChunk(totalIds[i]);
}
};
var requestResultForOneChunk = function(streetIds) {
$.ajax({
beforeSend: function() {
var requestStartTime = new Date().getTime();
dataProviderRequestsStartTime.push(requestStartTime);
},
type : 'POST',
url : "myServlet",
contentType : "application/x-www-form-urlencoded",
data : {
"ids" : streetIds,
},
success : function(response) {
//Request Finished
var dataProvideRequestEndTime = new Date().getTime();
dataProviderRequestsEndTime.push(dataProvideRequestEndTime);
addFeaturesToMap(response);
},
error : function(x, e) {
alert("Something went wrong in the request" + e);
}
});
};
var addFeaturesToMap = function(measurements) {
//Parsing Started
var featureParsingStartTime = new Date().getTime();
dataParsingStartTime.push(featureParsingStartTime);
doParsing(measurements);
//Parsing Finished
featureParsingEndTime = new Date().getTime();
dataParsingEndTime.push(featureParsingEndTime);
};
$("#loading").bind(
"ajaxStart",
function(options) {
ajaxStartTime = options.timeStamp;
}).bind("ajaxStop", function(options) {
var ajaxEndTime = options.timeStamp;
var totalTime = (ajaxEndTime - ajaxStartTime);
calculateTimeBreakDown();
});
var calculateTimeBreakDown = function() {
var totalValues = dataProviderRequestsEndTime.length;
var lastValueIndex = totalValues - 1;
// Request Time calculation
var endTimeOfLastRequest = dataProviderRequestsEndTime[lastValueIndex];
var startTimeOfFirstRequest = dataProviderRequestsStartTime[0];
var totalRequestTime = (endTimeOfLastRequest - startTimeOfFirstRequest);
// Parsing Time Calculation
var endTimeOfLastParsing = dataParsingEndTime[lastValueIndex];
var startTimeOfFirstParsing = dataParsingStartTime[0];
var totalParsingTime = (endTimeOfLastParsing - startTimeOfFirstParsing);
};
最後,我requestTime(totalRequestTime)和parsingTime(totalParsingTime)。但問題是這些都不會產生接近使用ajax啓動和停止計算的總時間的值。
感謝您的回覆。我忘了提及我已經在使用.ajaxStart和.ajaxStop來計算「總時間」。但是,而不是ajaxComplete,我捕捉了「成功」事件回調時個人請求的開始/結束時間。這樣做的原因是在開始解析之前分解請求時間。但是,一旦我爲總請求計算了時間(請求+分析),則進一步添加請求+分析時間不會按照使用AJAX Start/Stop計算的總時間生成結果。 –
請看我上面發佈的代碼,如果我做錯了,請告訴我。 –
看着你添加到你的問題的代碼:你爲什麼不使用.ajaxStart()和.ajaxStop()?這將使這個代碼很小,因此也減少了花費多長時間花費多少時間,感謝您的回覆花費了 –