为什么setInterval的运行速度低于预期?

时间:2017-09-28 07:40:35

标签: node.js

我希望以下代码<div class=web> <a href="https://web1.com/"><img src="https://www.google.com/s2/favicons?domain=web1.com">WEB1.com</a> <a href="https://web2.com/"><img src="https://www.google.com/s2/favicons?domain=web2.com">WEB2.com</a> ... </div> setInterval之前运行100次。

setTimeout

但其结果是:

var current = 0;

var timer = setInterval(function(){
    process.stdout.write(current.toString() + '\n');

    if(current === 1000) {
        clearInterval(timer);
        process.stdout.write('Done');   
    }

    current += 10;
}, 10);

setTimeout(function(){
    process.stdout.write('This is 1000.\n');
}, 1000);

我对860 870 880 This is 1000. 890 900 910 920 930 940 950 960 970 980 990 1000 Done 无法理解的内容?我认为最后setIntervalsetInterval应该在最后一起运行。

3 个答案:

答案 0 :(得分:1)

所有预定代码都放在一个队列中并由一个线程处理。如果setInterval函数的完成速度不能超过10毫秒,则执行时间将落后于计划。无法保证准确的执行时间。

答案 1 :(得分:1)

setTimeout和{{1}}没有执行/调度保证,并且最多间隔10毫秒几乎总是会失败。您可以在浏览器上以可预测的间隔获得的最佳效果是duplicated。这通常会匹配屏幕的刷新率,因此通常为60.6Hz的16.66ms间隔。请记住,这仍然会丢帧,如果标签未对焦,它可能会被暂停。

答案 2 :(得分:0)

可能因为#include <stdio.h> #include <string.h> int main (void) { char abcd[] = "abcd"; char bc[3] = ""; strncpy(bc, abcd + 1, 2); puts(bc); } 这是一个完美的I / O操作需要超过process.stdout.write

10ms正在等待该功能完成,然后开始另一个。