页面优化requestIdleCallback和requestAnimationFrame详解

requestIdleCallback和requestAnimationFrame详解
API
 window.requestIdleCallback只有当系统有空闲时间时才会执行,若一直没有空闲时间则一直会等待,有一个options可选timeout超时取消,意思是当等待时间超过设定时间时就取消该任务

var handle = window.requestIdleCallback(callback[, options])
  • callback:回调,即空闲时需要执行的任务,该回调函数接收一个IdleDeadline对象作为入参。其中IdleDeadline对象包含:
    • didTimeout,布尔值,表示任务是否超时,结合 timeRemaining 使用。
    • timeRemaining(),表示当前帧剩余的时间,也可理解为留给任务的时间还有多少。
  • options:目前 options 只有一个参数 timeout。表示超过这个时间后,如果任务还没执行,则强制执行,不必等待空闲。

IdleDeadline对象参考MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/IdleDeadline

window.requestAnimationFrame(func)
每次都会执行,类似于setInterval只不过不用传延时,requestAnimationFrame采用系统时间间隔,保持最佳绘制效率,不会因为间隔时间过短,造成过度绘制,增加开销;也不会因为间隔时间太长,使用动画卡顿不流畅,让各种网页动画效果能够有一个统一的刷新机制,从而节省系统资源,提高系统性能,改善视觉效果。

特点
requestAnimationFrame会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率
在隐藏或不可见的元素中,requestAnimationFrame将不会进行重绘或回流,这当然就意味着更少的CPU、GPU和内存使用量
requestAnimationFrame是由浏览器专门为动画提供的API,在运行时浏览器会自动优化方法的调用,并且如果页面不是激活状态下的话,动画会自动暂停,有效节省了CPU开销
使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `requestAnimationFrame` 是一个浏览器 API,它可以让你的 JavaScript 在下一个浏览器重绘之前运行。这样可以有效地提高动画的性能,因为它可以让浏览器在重绘之前知道你的动画需要做什么。使用`requestAnimationFrame`可以避免浏览器的重绘和回流,提高动画的流畅度。 使用方法: ``` // 定义动画函数 function animate() { // 在这里编写动画代码 requestAnimationFrame(animate); } // 开始动画 requestAnimationFrame(animate); ``` 注意:不同浏览器有不同的实现,如果不支持`requestAnimationFrame`,可以使用`setTimeout`或`setInterval`来模拟。 ### 回答2: requestAnimationFrame 是用来代替 setTimeout 或 setInterval 的一种优化方案,它可以让Javascript在浏览器的下一次重绘之前执行某个函数,以达到最佳的渲染效果。 它的优点在于可以让浏览器在渲染性能的限制下自动调整,以便保持每秒渲染帧率在60FPS左右,从而有效避免掉帧现象,一定程度上优化体验。 使用 requestAnimationFrame 的语法如下: window.requestAnimationFrame(callback); 其中,callback 是在下一帧渲染时要执行的函数,它会自动传入一些参数,例如时间戳等。 具体来说,requestAnimationFrame 的工作原理是这样的: 1. 当 Javascript 代码执行到 window.requestAnimationFrame() 时,会把回调函数放到一个队列里面等待执行。 2. 浏览器在下一次重绘之前会检查这个队列,如果队列里有函数,就执行这些函数,否则什么也不做。 3. 如果函数执行的过程中或执行完成后,将再次请求下一帧的重绘。 有了 requestAnimationFrame,我们就可以编写更加流畅自然的动画效果,而不必担心因为性能瓶颈导致掉帧,从而达到更好的用户体验。同时,它也可以有效避免由于 setInterval 或 setTimeout 过于频繁地操作Dom节点而引起的性能问题。不过值得注意的是,requestAnimationFrame 并不支持 IE9 及以下版本的浏览器,因此在进行兼容性考虑时需要引入 polyfill 或使用其他方案。 ### 回答3: requestAnimationFrame(简称RAF)是一种用于浏览器动画效果的方法。该方法通过以比setInterval更优秀的方式在浏览器下一次渲染时刻之前更新动画效果,以使动画流畅自然。在一些高要求的场景下,使用setTimeout和setInterval往往会导致更新不及时;而使用requestAnimationFrame可以保证效果在下一次渲染时完成,确保页面更新及时、不丢帧。 requestAnimationFrame的主要特点是: - 操作DOM次数减少,增强性能 - 优化页面动画,避免出现卡顿现象 - 适用于各种各样的动画效果 - 减少了原来程序需要处理时间,使得程序变得更加高效 requestAnimationFrame最大的优点是:在页面未找到其他的任务时,一次帧效果可以达到每秒60帧,基本上和显示器的刷新频率相匹配。此外,requestAnimaitonFrame会自动适应浏览器窗口大小的变化,并且可以在各种设备上正常工作。另外,requestAnimationFrame还可以在浏览器最小化、后台挂起等情况下暂停,以节省计算资源。 使用requestAnimationFrame的步骤如下: 1.调用requestAnimationFrame函数,并带有一个函数作为参数 2.在函数中改变元素属性或是Canvas的状态和图像/文本内容 3.使浏览器执行函数 使用requestAnimationFrame的方法一般都遵循“递归调用”的设计模式。就是说每次执行函数时都会加入下一个临界点循环,递归执行直到某个条件终止。 总之,requestAnimationFrame是一种比setTimeout更优秀的动画效果控制方法,其优点是高效、流畅,对于大多数的动画效果是一个很好的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值