Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

定时器在浏览器中和nodejs中的差异??

$
0
0
如下一段代码分别在 chrome控制台中调试和nodejs环境下调试
(function testSetInterval() {
    let i = 0;
    const start = Date.now();
    const timer = setInterval(() => {
        i += 1;
        i === 5 && clearInterval(timer);
        console.log(`第${i}次开始`, Date.now() - start);
        for(let i = 0; i < 100000000; i++) {}
        console.log(`第${i}次结束`, Date.now() - start);
    }, 100);
})();
在浏览器下的结果:每次结束便立即开始执行,基本没有消耗时间。
VM117:7 第1次开始 111
VM117:9 第1次结束 1095
VM117:7 第2次开始 1096
VM117:9 第2次结束 2043
VM117:7 第3次开始 2043
VM117:9 第3次结束 3010
VM117:7 第4次开始 3010
VM117:9 第4次结束 3923
VM117:7 第5次开始 3939
VM117:9 第5次结束 4911
在nodejs下的结果 :每次结束到下次开始都要等100ms左右
第1次开始 140
第1次结束 1281
第2次开始 1390
第2次结束 2545
第3次开始 2654
第3次结束 3777
第4次开始 3902
第4次结束 5010
第5次开始 5119
第5次结束 6274
经过我查资料和思考认为是在浏览器内,定时器在每过100ms就要执行了,不会管前面任务的占用的时间,但是由于被前一个任务占着主线程,所以出现第一个结束和第二个开始几乎同时执行,而nodejs要等待第一个结束完之后再开始进入进入第二个,不知道理解的对不对。求各位前辈不吝赐教,讲一下这个是为什么,多谢了。

Viewing all articles
Browse latest Browse all 14821

Trending Articles