JavaScript setTimeout()延迟

JavaScript setTimeout()延迟,javascript,jquery,timeout,delay,Javascript,Jquery,Timeout,Delay,我遇到了一个问题,window.setTimeout的延迟似乎被忽略或随机化 function timer() { var refreshTimer = 0; var delay = 300000; // 5 min this.init = function () { this.startRefreshTimer(); $(document) .ajaxStop(this.startRefreshTimer)

我遇到了一个问题,window.setTimeout的延迟似乎被忽略或随机化

function timer() {
    var refreshTimer = 0;

    var delay = 300000; // 5 min

    this.init = function () {
        this.startRefreshTimer();
        $(document)
            .ajaxStop(this.startRefreshTimer)
            .ajaxStart(this.stopRefreshTimer)
        ;
    };

    this.startRefreshTimer = function() {
        refreshTimer = window.setTimeout(resetTimer, delay - 10000);
    };

    this.stopRefreshTimer = function() {
        window.clearTimeout(refreshTimer);
    };

    function resetTimer() {
        $.ajax(url);
    }

    this.init();
}
这适用于一组随机时间,甚至在多个浏览器和选项卡中,但过了一段时间,延迟就爆发了

以下是请求时间的日志:

17:50:04
17:54:55 // + 5 min - ~10 sec
17:59:46 // ||
18:04:37 // ||
18:09:28 // ||
18:14:19 // ||
18:19:10 // ||
18:24:01 // ||
18:28:52 // ||
18:33:43 // ||
18:38:34 // ||
18:43:25 // ||
18:48:16 // ||
18:53:07 // ||
18:57:58 // ||
19:15:09 // + ~ 17 min ???

我不能使用window.setInterval,我不会提供有关此代码用途的更多信息。我只是想知道是否有人有过类似的经历和/或知道这个问题的解决方案。

设置超时有一点延迟,它永远不会100%准确。setInterval更准确,但仍然不是100%。我唯一能建议的是,计算出超出目标的毫秒数,然后将其添加到下一个setTimeout[1][2]@Cristi:THX很多。链接确实有助于理解这件事。虽然有些参考文献有点不推荐和/或太像忍者了。不管怎样,问题为我解决了。如果有人在乎,我会花时间发布我的解决方案。