特殊浏览器api记录

144 阅读1分钟

intersertionObserver

用于观察元素在其祖先节点/可视窗口的交叉状态的变化。

在每一帧渲染完且线程空闲时计算。

getBoundingClientRect

用于获取元素在可视窗口里的相对位置。

requestIdleCallback

可随时被优先级高任务打断的,只在线程空闲时(除渲染,事件执行)执行的的异步方法

MessageChannel

创建两个port用于通讯,每一个port都有一个postMessage方法,还有一个onMessage监听回调.

它有一个很大的特点:postMessage和onMessage的回调执行是插入到微任务队列中的。

它可用于

  • 跨标签页
  • iframe
  • webworker
  • 异步任务调度

它和别的异步方法有很大的区别

  • settimeout:放入宏任务,且最小延迟也是4ms
  • requestAnimeFrame: 和屏幕帧率相关、和视图是否卡顿有关,也就是说其实不是严格的16.ms
  • Promise.then:立即放入微任务,会导致宏任务饿死
  • MessageChannel:可调控的异步调度,没有最小延迟影响