Why do browsers throttle JavaScript timers?
9 months ago
- #JavaScript
- #Browser APIs
- #Web Performance
- 由于浏览器为防止滥用而进行节流控制,setTimeout(0)实际存在至少4毫秒的最小延迟
- 浏览器引入节流机制是为了避免电量消耗并保持交互性,具体策略因场景而异:电池供电设备约16毫秒,后台标签页约1秒
- 与setTimeout相比,scheduler.postTask等新型API能以更小延迟提供更好性能
- 不同浏览器对setTimeout替代方案的性能表现各异:Chrome和Firefox限制在约4毫秒,而Safari的节流更为严格(约26毫秒)
- 关于定时器节流的争论聚焦于开发者控制权与用户体验的平衡,这促使了scheduler.postTask等支持更精细控制的API诞生
- 出于遗留问题与网络兼容性考虑需要维持setTimeout节流机制,而新型API旨在提供更好的替代方案且不破坏现有网站