javascript - setTimeout, requestTimeFrame刷新率谁小
高洛峰
高洛峰 2017-04-10 16:04:37
[JavaScript讨论组]

最近做一个尽量快的counter,遇到一些疑惑:

  1. 为什么setTimeout的刷新率能比requestAnimationFrame高?

  2. 除了setTimeout 1微秒以外,还能更快的计数吗?

setTimeout方式以1微秒去计数,数到1000大致花了6.5s

var i = 0;
function loop() {
    if(i == 1000) {
        console.log('end');
    } else {
        doSomething();

    setTimeout(loop, 1);
    }
    
}

function doSomething() {
    document.body.innerHTML = i++;
}

以requestAnimationFrame去数到1000,大致花了16.7s。刷新率大致是1s/60

var i = 0;
function step() {
    if(i == 1000) { // 16717
        console.log('end');
    } else {
        document.body.innerHTML = i++;
        requestAnimationFrame(step);
    }

}
requestAnimationFrame(step);
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
黄舟

requestAnimationFrame不需要使用者指定循环间隔时间,浏览器会基于当前页面是否可见、CPU的负荷情况等来自行决定最佳的帧速率,从而更合理地使用CPU。
所以你这么比没什么意义啊,因为你这个doSomething太简单了,如果进行一些复杂的操作有可能会发生阻塞,也就说不清谁快谁慢了不是?

怪我咯

setTimeout设置为1肯定比requestAnimationFrame快,requestAnimationFrame是根据浏览器的设备绘制间隔来决定的。

关于这两个的讨论可以看看张鑫旭的博客

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号