AJAX 发送和接收之间的时间返回负值
time between ajax send and recieve return negative value
我正在尝试测量发送和接收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");
相关文章:
- 有没有更好的方法可以测量从Ajax调用返回数据所需的总时间
- 时刻.js时区值返回错误的时间戳
- PhoneGap API返回时间戳格式
- new Date返回NaN或从服务器日期()开始的错误时间
- 返回两个日期时间单元格之间的差值
- 从Google Maps API返回的jQuery格式时间
- 新日期在使用日期时间选取器时返回 NA 值
- 为返回的变量添加时间戳
- 为什么此 Google 日历 API 请求不返回开始时间等事件数据
- AJAX 发送和接收之间的时间返回负值
- Date 对象在尝试计算 IE8 中两个日期之间的时间时返回 NaN
- 本地日期转换为 UTC 纪元时间并在 JavaScript 中返回日期时不匹配
- Safari (Mac OS X Lion) 将错误的纪元时间值返回给 position.timestamp 调用
- 关闭模式对话框时,从模式对话框返回时间
- Facebook Graph API将隐藏时间返回为可读时间格式
- UTC日期时间返回到原始日期时间
- 执行.click()方法时jQuery$(element)未定义-在所有其他时间返回element
- JavaScript 将时间返回到最接近的季度
- Javascript运行日期时间返回值在chrome中工作,但在Internet explorer中不工作
- 音频持续时间返回NaN需要一些修改来运行播放器