IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    FantasyGao发表于 2017-04-17 07:29:25
    love 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要等待第一个结束完之后再开始进入进入第二个,不知道理解的对不对。求各位前辈不吝赐教,讲一下这个是为什么,多谢了。


沪ICP备19023445号-2号
友情链接