请说明如何用 JavaScript 实现精确计时,并解释为什么 setInterval(fn, 1000) 不够准确以及如何通过时间戳同步来校准。
考察说明
考察对 JavaScript 定时器精度限制的理解及时间戳校准方案的设计能力
回答思路
- 指出 setInterval 受事件循环阻塞、节流和后台标签页影响导致漂移
- 说明基于 Date.now() 或 performance.now() 计算目标执行时间并补偿间隔的校准思路
- 讨论使用 setTimeout 递归替代 setInterval 以避免任务堆积
- 考虑休眠、系统时间调整等边界场景的处理