setInterval最短极限有多快?
在几年前的一次测试里,几乎所有浏览器的定时器最短间隔都是64/1000秒,于是我默认了这个答案。但在今天无意中去测试了下,发现结果大不一样,所以要更新下过去的结论。
平时我们为了最频繁的速度执行某段代码,一般都写成setInterval(XXX, 1)。虽然明知是达不到1ms的间隔的,但我们总希望浏览器能尽可能快些。但浏览器究竟能到达多快呢?我们写个计数器测试下:
var n = 0; var max = 0; function tick() { n++; } function report() { if (n > max) max = n document.title = n + " Max:" + max; n = 0; } setInterval(tick, 1); setInterval(report, 1000); |
在IE里,仍然是那经典的数字:64,每15.625ms触发一次。当然这并不是浏览器的BUG,如果你做过windows程序开发的话,应该知道SetTimer API的精度是很低的,差不多每秒64次,显然IE里是用了这个。这意味着如果你要做动画或者游戏的话,最高的FPS可以到达64。不过对于如今清一色的液晶显示器来说,这个速度还是足够了,因为液晶只有60HZ的刷新率。事实上,实际应用中能达到64的FPS已是相当不错了,毕竟一次复杂的渲染要控制在16ms内,还是比较有挑战的。而且64FPS也远超人眼的分辨,给人的感觉已是非常平滑了。
当然,上述只代表IE的测试结果。事实上其他的浏览器在一次次更新后,如今已是各不相同了。下面列出了在各个浏览器下,测试了一段时间后记录到的最大值:
IE: 64
FireFox: 75
Opera: 512
Safari: 94
Chrome: 207
显然,用setInterval(XXX, 1)来追求最快的渲染是很不合理的,不仅浪费了大量的资源,而且在不同的浏览器下表示出的速度也各不一样。因此对于简单的界面渲染,用最简单的办法就是setInterval(XXX, 17)或者再高点。如果是复杂的界面,那就得自己维护一个定时器,并且控制跳帧了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人