为什么这段代码可能会产生很大的负值?

时间:2016-04-04 22:44:04

标签: javascript math analytics

我使用简单的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或某些非常大的值。我似乎无法弄清楚数学会出错的地方。

0 个答案:

没有答案