当前位置:网站首页>setTimeout 、setInterval、requestAnimationFrame
setTimeout 、setInterval、requestAnimationFrame
2022-08-03 12:10:00 【rananie】
文章目录
setTimeout 、setInterval、requestAnimationFrame
面试题
- setTimeout(cb, 0)会立刻执行吗?
- settimeout定时的时间准确吗? 为什么不准确? 怎么解决?
- setTimeout和requestAnimation的区别
- requestAnimationFrame讲一下你的理解
- setTimeout实际延迟时间
- 用setTimeout实现setInterval,实现一个随时停止的版本
- setTimeout 和 setInterval区别
- JS实现动画的方式
- requestAnimationFrame与requestIdleCallback分别是什么?
- requestAnimationFrame的执行时机?
- 事件循环,宏任务微任务,requestanimationframe回调函数中进行大量计算,会阻塞页面的渲染吗
setTimeout定时器的时间准吗?
setTimeout的时间是指ms之后将回调函数放入宏队列中,当时间为0时,
- 在nodejs中
setTimeout(demo, 0) === setTimeout(demo, 1),最小是1ms - 在浏览器里面
setTimeout(demo, 0) === setTimeout(demo, 4),最小是4ms
在事件循环中,先执行完同步代码后,先需要执行微队列中任务,然后再到宏队列,所以定时器的事件是不准确的
setTimeout 和 setInterval
setTimeout(fn,time):在指定时间后执行一次回调函数setInterval(fn,time):周期性地执行回调函数
setInterval存在的问题
1.某些间隔被跳过;
2.实际代码执行间隔 <= 设定的时间间隔
假设,某个onclick事件处理程序使用setInterval()设置了200ms间隔的定时器。如果事件处理程序花了300ms多一点时间完成,同时定时器代码也花了差不多的时间,就会同时出现跳过某间隔的情况
使用setTimeout构造轮询能保证每次轮询的间隔
setTimeout(function fn() {
// do something
setTimeout(fn, delay)
}, delay)
当一个定时器执行完毕后,才开启另一个定时器。
这样做的好处 ①在前一个定时器代码执行完之前,不会向队列插入新的定时器代码,确保不会有任何缺失的间隔。② 它可以保证在下一次定时器代码执行之前,至少要等待指定的间隔,避免了连续的运行。
用setTimeout实现setInterval,可以随时停止
function mySetTimeout(fn,delay){
let timer = null;
let interval = ()=>{
fn();
timer = setTimeout(interval,delay); //开启后续定时器,取消也是取消后续的
}
setTimeout(interval,delay); //第一次调用定时器
return {
cancel:()=>{
clearTimeout(timer);
}
}
}
const {
cancel } = mySetTimeout(() => console.log(888),1000)
setTimeout(()=>{
cancel()
},4000)
requestAnimationFrame H5新增API
JS实现动画的方法
- setTimeout
- setInterval
- requestAnimationFrame
显示器的刷新频率是60Hz,浏览器也会尽量保持60Hz的刷新率运行,也就是16.7ms刷新一帧所以(60次/s)
requestAnimationFrame是什么?
requestAnimationFrame是H5新增的API类似于setTimeout ,告诉浏览器希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数。主要用途是按帧对网页进行重绘。
requestAnimationFrame的基本思想就是与显示屏的刷新频率保持同步,利用这个刷新频率进行页面重绘。
setTimeout 和requestAnimationFrame 的区别
| 类型 | 回调函数执行的时机 | 是否在后台一直执行 | 丢帧现象 |
|---|---|---|---|
| setTimeout | 用户指定时间,放入宏队列中,最终执行的时间是不确定的 | √ | √ 由于执行时间的不确定性,setTimeout的执行步调可能和屏幕的刷新步调不一致,从而引起丢帧现象。 |
| requestAnimationFrame | 由系统决定回调函数的执行时机,在下次重绘之前调用 | × 它会在页面出现的时候才会执行,一旦页面不处于浏览器的当前标签,就会自动停止刷新 原因:当页面处于未激活的状态下,该页面的屏幕刷新任务会被系统暂停 | × 在重绘之前调用不会丢帧 |
requestIdleCallback
浏览器一帧内需要完成如下六个步骤的任务
处理用户的交互
JS 解析执行
帧开始。窗口尺寸变更,页面滚去等的处理
requestAnimationFrame(rAF)
布局
绘制
requestAnimationFrame在每次屏幕刷新的时候被调用requestIdleCallback在每次屏幕刷新时,判断当前帧是否还有多余的时间(上述6个步骤执行完后),如果有,则会调用requestIdleCallback的回调函数,
边栏推荐
- 基于SSM和Web实现的农作物生长监控系统
- 一文带你弄懂 CDN 技术的原理
- Blazor Server(6) from scratch--policy-based permission verification
- 字符串本地化和消息字典(二)
- -找树根2-
- R语言ggplot2可视化:使用ggpubr包的ggsummarystats函数可视化箱图(通过ggfunc参数设置)、在可视化图像的下方添加描述性统计结果表格
- [深入浅出]三位数排序
- bash if conditional judgment
- Vs 快捷键---探索不一样的编程
- Explain the virtual machine in detail!JD.com produced HotSpot VM source code analysis notes (with complete source code)
猜你喜欢

距LiveVideoStackCon 2022 上海站开幕还有3天!

后台图库上传功能

Matlab学习12-图像处理之图像增强

YOLOv5训练数据提示No labels found、with_suffix使用、yolov5训练时出现WARNING: Ignoring corrupted image and/or label

net start mysql 启动报错:发生系统错误5。拒绝访问。

What knowledge points do you need to master to learn software testing?

广州番禺:暑期防溺水,安全不放假

3年软件测试经验,不懂自动化基础...不知道我这种测试人员是不是要被淘汰了?
![[论文阅读] (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比](/img/48/8d2cdf33862dc4622230c69d381b82.png)
[论文阅读] (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比

(through page) ali time to upload the jar
随机推荐
谷歌研究员被群嘲:研究员爆料AI有意识,被勒令休假
dataset数据集有哪些_数据集类型
-找树根-
微信为什么使用 SQLite 保存聊天记录?
使用.NET简单实现一个Redis的高性能克隆版(一)
项目概述、推送和存储平台准备
国内数字藏品与国外NFT主要有以下六大方面的区别
[深入浅出]三位数排序
viewstub 的详细用法_pageinfo用法
App自动化测试怎么做?实战分享App自动化测试全流程
R语言使用zoo包中的rollapply函数以滚动的方式、窗口移动的方式将指定函数应用于时间序列、计算时间序列的滚动标准差(设置每个窗口不重叠)
数据库系统原理与应用教程(074)—— MySQL 练习题:操作题 141-150(十八):综合练习
OFDM 十六讲 4 -What is a Cyclic Prefix in OFDM
【Verilog】HDLBits题解——Verification: Reading Simulations
深度学习中数据到底要不要归一化?实测数据来说明!
日常开发写代码原则
Go 语言快速入门指南: 介绍及安装
一个扛住 100 亿次请求的红包系统,写得太好了!!
Matlab学习13-图像处理之可视化GUI程序
面试突击71:GET 和 POST 有什么区别?