我使用简单的JavaScript来计算在网页上花费的平均时间。它工作正常,但有时会产生一个非常大的负值,如此。 -686496480000
这是代码。
module.exports = function(options) {
var _lastHeartbeat = (new Date()).getTime();
var _specialEvents = {
heartbeat: function (e) {
var heartbeat = (new Date()).getTime();
_queueEvent({}, {
_t: 'timespent',
_v: Math.round((heartbeat - _lastHeartbeat) / 1000) * 1000
});
_sendEvents();
_lastHeartbeat = heartbeat;
}
}
var _startHeartbeat = function () {
var beat = function (interval) {
setTimeout(function () {
_specialEvents.heartbeat();
if (interval < _config.heartbeat.max) {
beat(_config.heartbeat.degrade(interval));
}
}, interval);
};
beat(_config.heartbeat.start);
}
var _init = function (ops) {
_startHeartbeat();
}
return {init: _init};
};
这是来自配置
heartbeat: {
start: 5000,
max: 600000,
degrade: function (interval) {
var int = Math.pow(interval, 1.05);
return Math.round(int/10000) * 10000;
}
}
代码可能不完整,但是代码中的第二个代码是获取最后一个时间戳并用now
时间戳减去然后触发请求的代码。因此,我可以计算用户在页面上花费的平均时间。
对于常规情况,请求将像这样被触发。
_t=timespent,_v=5000
_t=timespent,_v=10000
_t=timespent,_v=20000
_t=timespent,_v=30000
_t=timespent,_v=50000
但有时,_v
值会-686496480000
或某些非常大的值。我似乎无法弄清楚数学会出错的地方。