intersertionObserver
用于观察元素在其祖先节点/可视窗口的交叉状态的变化。
在每一帧渲染完且线程空闲时计算。
getBoundingClientRect
用于获取元素在可视窗口里的相对位置。
requestIdleCallback
可随时被优先级高任务打断的,只在线程空闲时(除渲染,事件执行)执行的的异步方法
MessageChannel
创建两个port用于通讯,每一个port都有一个postMessage方法,还有一个onMessage监听回调.
它有一个很大的特点:postMessage和onMessage的回调执行是插入到微任务队列中的。
它可用于
- 跨标签页
- iframe
- webworker
- 异步任务调度
它和别的异步方法有很大的区别
- settimeout:放入宏任务,且最小延迟也是4ms
- requestAnimeFrame: 和屏幕帧率相关、和视图是否卡顿有关,也就是说其实不是严格的16.ms
- Promise.then:立即放入微任务,会导致宏任务饿死
- MessageChannel:可调控的异步调度,没有最小延迟影响