浏览器API

requestIdleCallback用于在浏览器空闲时执行任务,确保不阻塞主任务,保证流畅体验。它可以设置超时时间,并通过IdleDeadline参数监控剩余时间。requestAnimationFrame则用于创建流畅的动画,其回调在每次重绘前执行,参数timestamp提供精确的时间戳。两者都是优化页面性能的重要工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

requestIdleCallback

利用浏览器空闲时间执行任务,如果有高优先级的任务,当前执行的任务将会被终止,优先执行高级别的任务。

浏览器空闲时间

浏览器的画面是一帧一帧渲染出来的,当每秒绘制帧数达到60帧时,页面是流畅的,用户不会感觉到卡顿。此时每一帧的渲染时间是1000/60 ≈ 16 ms ,如果每一帧执行时间小于16ms, 就说明浏览器有空闲时间。

如果在任务在剩余时间内没有执行完成,则会停止任务执行,继续优先执行主任务,也就是说 requestIdleCallback 总是利用浏览器空闲时间执行任务。

使用
const requestIdleId = requestIdleCallback(function(IdleDeadline){

}, {
	timeout: 1000
})
// IdleDeadline 一个在事件循环空闲时即将被调用的函数的引用。函数会接收到一个名为 IdleDeadline 的参数,这个参数可以获取当前空闲时间以及回调是否在超时时间前已经执行的状态。
// 如果指定了 timeout,并且有一个正值,而回调在 timeout 毫秒过后还没有被调用,那么回调任务将放入事件循环中排队,即使这样做有可能对性能产生负面影响。
返回值

一个 ID,可以把它传入 Window.cancelIdleCallback() 方法来结束回调。

requestAnimationFrame

window.requestAnimationFrame(callback) 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行。

使用
const requestAnimationId = requestAnimationFrame(function (timestamp){
	// timestamp 该参数与performance.now()的返回值相同,它表示requestAnimationFrame() 开始去执行回调函数的时刻。
})
返回值

一个 long 整数,请求 ID,是回调列表中唯一的标识。是个非零值,没别的意义。你可以传这个值给 window.cancelAnimationFrame() 以取消回调函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值