对于我的应用程序中的数据可视化请求,我向一个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()?这将使这个代码很小,因此也减少了花费多长时间花费多少时间,感谢您的回复花费了 –