首页 > 解决方案 > 如何将要在下一帧调用的 MicroTask 排队?

问题描述

在不是 NodeJS 的现代浏览器环境中运行:

有没有办法让 MicroTask 在下一帧中被调用?

MicroTask 队列在 Task 之后被刷新,这是在任何 requestAnimationFrame 回调之前。

在任何 rAF 回调之后,也会再次刷新 MicroTask 队列。

从 rAF 回调中请求的任何 rAF 回调确实会在下一帧发生,但仅在完成任何任务或微任务之后才会发生。

setTimeout 将任务排队,但不能保证在下一帧执行。

requestIdleCallback 的触发也是不可预测的。

ResizeOberver 听起来可能会在下一帧触发,但我不确定,但它仅在 Chrome 中受支持,并且 polyfill 将基于 rAF 或超时。

标签: javascript

解决方案


您提到了裸 requestIdleCallback 和 rAF 的问题。React 具有声称可以解决这些问题的内置库。看看:https ://github.com/facebook/react/blob/43a137d9c13064b530d95ba51138ec1607de2c99/packages/react-scheduler/src/ReactScheduler.js


推荐阅读