如何测量将JSON字符串解析为Javascript对象的时间

时间:2012-03-30 14:07:48

标签: javascript ajax json timing

我正在使用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
    }
);

所以我想抓住浏览器引擎中与处理该对象相关的整个过程的时间。 我怎么能这样做?

3 个答案:

答案 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