我正在使用AJAX查询从服务器端获取一些长数组。 数组真的很大(比如百万个元素),所以即使是HTTP查询也需要一些时间,我在控制台中看到它。 但是在查询完成之后,有一段时间过去,直到我看到来自AJAX查询的回调函数的输出。
我尝试在该函数中测量一些时间,但时间差是悲惨的,并不像是指整个过程。 (如果我把时间括号放在AJAX查询功能之外,我无论如何都得到零,这很明显为什么) 检查Firebug剖面仪结果也没有给我胶水..
这是我的代码(我使用jQuery):
$.getJSON(
'some-url',
'',
function(data) {
var start = (new Date).getTime();
console.log(data.length);
var end = (new Date).getTime();
console.log((end - start) /1000); // for 1M array gives something like 0.03 s
}
);
所以我想抓住浏览器引擎中与处理该对象相关的整个过程的时间。 我怎么能这样做?
答案 0 :(得分:2)
使用ajax
,而不是getJSON
:
$.ajax({
url: 'some-url',
dataType: 'text',
success: function(jsonText) {
console.log(jsonText.length);
var start = (new Date).getTime();
var data = $.parseJSON(jsonText);
var end = (new Date).getTime();
console.log((end - start) /1000); // for 1M array gives something like 0.03 s
}
});
答案 1 :(得分:1)
如果我正确理解您的答案,您需要衡量处理响应所需的时间。我看起来像传递给$ .getJSON的回调是在解析响应JSON之后调用的。您将需要使用不同的方法,可能是$ .ajax。以下代码也应该有效(未经测试):
function initiateGetRequest(url, callback)
var req;
req = new XMLHttpRequest();
req.open("GET", url, true);
req.onreadystatechange = function() {
if (req.readyState === 4) {
callback(req.responseText, req.status);
}
};
req.send(null);
}
function processMyJSONResponse(responseText, statusCode) {
var startTime;
var myResponseObject;
if (statusCode === 200) {
startTime = Date.now();
// Processing logic here
myResponseObject = JSON.parse(responseText);
console.log((Date.now() - startTime) / 1000);
} else {
console.log("Something went wrong, statusCode: " + statusCode);
}
}
// somewhere else
initiateGetRequest("myUrl", processMyJSONResponse);
答案 2 :(得分:0)
答案很简单:create a jsPerf test case。它允许运行异步或“延迟”测试。
或者,您可以使用Benchmark.js并手动设置测试用例。
不要简单地将两个new Date
时间戳比较为this is not an accurate way of measuring things across all browsers and devices。