javascript - setInterval 与 chrome 和 firefox 不同

标签 javascript settimeout setinterval

以下代码在 Firefox 和 Chrome 之间打印不同的结果

var start = Date.now()

var id = setInterval(function interval() {
    var whileStart = Date.now()   
    console.log(whileStart - start)
    while (Date.now() - whileStart < 250) { 
    }
}, 100)

setTimeout(function timeout() {
    clearInterval(id)
    console.log('timeout',Date.now() - start)       
}, 400)

chrome 74 打印:

100
351
605
timeout 855

firefox 67 打印:

101
351
timeout 601

为什么?

加上setTimeout延迟,结果还是不一样。

var start = Date.now()

var id = setInterval(function interval() {
    var whileStart = Date.now()   
    console.log(whileStart - start)
    while (Date.now() - whileStart < 250) { 
    }
}, 100)

setTimeout(function timeout() {
    clearInterval(id)
    console.log('timeout',Date.now() - start)       
}, 500)

最佳答案

setTimeout 将您的请求排队,以便在指定的延迟后第一时间处理。一旦延迟过去并且调用堆栈为空,您的请求就会得到处理。这意味着时间可能会略有不同,具体取决于浏览器引擎正在执行的其他操作。

关于javascript - setInterval 与 chrome 和 firefox 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56285424/

相关文章:

javascript - 通过 <a> 标签打开 Html 文件时,无法正确加载

javascript - jquery 和 highcharts SCRIPT1014 : Invalid character 出现无效字符错误

javascript - Chrome setTimeout() 计时问题

javascript - 从 setTimeout 调用时 window.event 失败

node.js - NodeJs : How to handle a very high amount of timers?

javascript - clearTimeout 不起作用 - 尝试了多种变体

javascript - 如何处理 Promise 中的异步代码?

javascript - 停止 JavaScript 间隔

JavaScript:如何防止用户使 setInterval/setTimeout 事件崩溃?

javascript - 将原型(prototype)添加到对象字面量中定义的对象构造函数