AJAX 发送和接收之间的时间返回负值

time between ajax send and recieve return negative value

本文关键字:时间 返回 之间 AJAX      更新时间:2023-09-26

我正在尝试测量发送和接收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);
    },
});

将其更改为:

beforeSend: function () {
    before = +new Date();
},
success: function (data, textStatus, xhr) {
    console.log(new Date() - before);
},

当前实现的问题在于Date.getMilliseconds()返回给定日期时间的千秒部分 - 即 0 到 999 [MDN] 之间的数字。但是您实际上想要比较给定日期时间的"毫秒戳" - 这就是Date.valueOf()(或Date.getTime())对[MDN]的作用:

valueOf 方法将 Date 对象的基元值作为 数字数据类型,自午夜 01 以来的毫秒数 1970 年 1 月 UTC。

但是,您可以省略这些调用,因为-操作会首先尝试将其操作数强制转换为基元(如果它们是对象)。所以这个...

console.log(new Date() - before);

。将按照与...

console.log(new Date().valueOf() - before);

由于将before中的起点存储为完整的 Date 对象没有意义,因此它被强制转换为基元值 - 带有 +(一元加号)运算符。

我想你在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");