javascript - 在每帧 rAF 之前运行任务的可靠方法
问题描述
我偶然发现了Paul Irish 发布的一篇文章——requestAnimationFrame Scheduling For Nerds 。
我通读了一遍,然后提出一个问题,我们有什么办法可以安排一个任务,在每一帧的 rAF 之前运行(见附图)?
解决方案
首先,Chrome 和 Firefox 在布局和绘制之前运行 rAF,保罗在他的文章中解释了这一点。Safari 和 IE有不同的行为,Edge 正在修复;
现在让我们回到你的问题;考虑在每一帧的 rAF 回调之前,有一种方法可以让 JS(我的任务)运行一点平静。假设“我的任务”执行需要约 4 毫秒,而您的 rAF 回调需要约 5 毫秒才能在每一帧中完成。这将是大约 9 毫秒的 JS 执行时间。那么这里有什么意义呢?我们可以在大约 9 毫秒内运行 rAF 回调中的所有内容,换句话说,这相当于延长 rAF 执行的长度:
帧前的总 JS 执行 = 我的任务代码执行 + 常规 rAF 代码执行
我们可以在 rAF 内部执行所有 Frame Critical JS 执行;将 JS 执行分为两部分(我的任务 + rAF)是没有意义的,因为在 Layout 和 Paint 之前执行rAF(JS 代码)的时间不超过 10 毫秒,如果我们超过 fps 下降,我们会看到卡顿;
TL:博士;除了 rAF 回调之外,没有其他方法可以在关键时刻执行 js :)
推荐阅读
- php - 在hostgator中将表格发送到电子邮件
- python - 使用 xarray 将时间坐标从 UTC 转换为本地时区
- javascript - 如何为引导面板标题设置溢出-x
- google-apps-script - 如何根据特定的列条件将一些数据移动到另一个选项卡
- clickhouse - Clickhouse:有没有办法在一个“alter table drop partition ****”查询中删除多个分区?
- vb6 - 当我更改 ComboBox 数据值时,值不会显示在标签上
- c# - 无法将数组转换为方法
- java - 如何在不覆盖先前副本的情况下将对象添加到类中的 ArrayList
- c# - Unity - 加载错误时脚本对象具有不同的序列化布局
- ios - 离线数据的同步 UITableView/UICollectionView 使用