我正在尝试测量发送和接收的ajax请求之间的时间,但它通常会返回负值 任何人都可以解释这种奇怪的行为吗?
var before = 0;
var after = 0;
$.ajax({
url: 'data.php',
type: 'GET',
beforeSend: function () {
before = new Date().getMilliseconds();
},
success: function (data, textStatus, xhr) {
after = new Date().getMilliseconds();
console.log(after - before);
},
});
答案 0 :(得分:3)
将其更改为:
beforeSend: function () {
before = +new Date();
},
success: function (data, textStatus, xhr) {
console.log(new Date() - before);
},
当前实现的问题是Date.getMilliseconds()
返回给定日期时间的milleseconds 部分 - 这是0到999 [MDN]之间的数字。但实际上你想要比较给定日期时间的“毫秒时间戳” - 这就是{MDN所代表的Date.valueOf()
(或Date.getTime()
}:
valueOf
方法返回Date对象的原始值作为 数字数据类型,自午夜01以来的毫秒数 1970年1月,UTC。
然而,您可以省略这些调用,因为-
操作首先尝试将其操作数转换为基元(如果它们是对象)。所以这......
console.log(new Date() - before);
...将与...一样处理。
console.log(new Date().valueOf() - before);
因为将before
中的起点存储为完整的Date对象没有意义,所以使用+
(一元加)运算符将其转换为原始值。
答案 1 :(得分:0)
我认为您在Date.getTime()
和Date.getMilliSeconds
getTime定义为
返回指定日期的数值作为数字 自1970年1月1日00:00:00 UTC以来的毫秒数(之前为负数) 次)。
所以,这也可以正常使用
before = new Date().getTime();
测量执行时间的MDN示例使用此
var end, start;
start = new Date();
for (var i = 0; i < 1000; i++)
Math.sqrt(i);
end = new Date();
console.log("Operation took " + (end.getTime() - start.getTime()) + " msec");