测量Ajax加载时间

5

我有一个$.ajax请求,并保存开始时间和结束时间(使用new Date().getMilliseconds())。我发现有时候从endTime减去startTime会得到一个负数。

(function(){
    var startTime = new Date().getMilliseconds();
    $.ajax({
        url:"/url.php",
        data: someObject,
        method: "POST",
        complete:function(r){
            var endTime = new Date().getMilliseconds();
            console.log(endTime - startTime); // sometimes negative?!
        }
    });
})();

请问有人能够解释一下这个问题吗?除了时空裂缝之外,我相信肯定还有一个合乎逻辑的解释。

(如果有更好的测量方法,也欢迎提供!)


如果您将 startTime 放在 beforeSend 处理程序中会发生什么?而 getmilliseconds 只是给您一个 0 到 999 之间的数字吗? - greener
1
如果在选项中加入 cache: false,会发生什么? - Barmar
1
@d-_-b 请参考 https://dev59.com/jHVC5IYBdhLWcg3wqzDV - greener
3个回答

8

.getMilliseconds 方法返回创建 Date 对象时的毫秒部分。因此,在50%的比较中,该部分将高于或低于任何其他日期对象。

你需要的是 new Date().getTime(),它返回自 Unix 纪元(1970年)以来的绝对毫秒数。


5

这通常会是负数(约有一半的时间),因为它并不是获取自1970年1月1日时刻以来的毫秒数,而是获取当前日期时间的毫秒数。因此,如果自上一秒以来已经过去了400毫秒,则您将得到400...如果自上一秒以来已经过去了800毫秒,则您将得到800。

您要查找的函数是:new Date().getTime()


3

一个小测试说

var date     = new Date();
var systemMS = date.getMilliseconds();
var timeMS   = date.getTime();


alert( 'Currently your clock is at ms :   '+ systemMS );
alert( '"ms" since 1 January, 1970 UTC. : '+ timeMS   );

所以尝试使用:

var start = new Date().getTime(); // note getTime()
$.ajax({
    url     :"/url.php",
    data    : someObject,
    method  : "POST",
    cache   : false,              // prevent caching response
    complete: function(){
        var end = new Date().getTime();
        console.log( end - start );
    }
});

MDN 表示:

getMilliseconds getMilliseconds 返回的值是 0 到 999 之间的数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接