解读javascript的计时器(翻译教程)(3)
2、计时器最小延时时间和可靠性
很明显,你可以延迟几秒钟、几分钟、几小时或任何你你想要的时间间隔,但最不明显的是你能选择的最小延时时间。
在一定程度上,浏览器不能为计时器提供良好的解决方案用以精确的处理它们(因为它们自身受操作系统时间的限制)。但是,纵观所有的浏览器,可以很安全的说,最小延时时间大约是10-15ms。
我们可以对跨平台假定的计时器间歇作简单的分析后得出这一结论。例如,如果我们分析延迟时间为0ms的setInterval,我们会发现在大多数浏览器中的最小延迟时间。
在OS操作系统下的浏览器中:
从左上角开始,依次为:Firefox 2, Safari 3, Firefox 3, Opera 9
在Windows操作系统下得浏览器中:
从左上角开始一次为:Firefox 2, Internet Explorer 6, Firefox 3, Opera 9
上面图表中的线条和数字显示了浏览器同时处理时间间歇的数量,我们可以得出结论:在OS上,浏览器的最小延时时间为10ms,在windows上为15ms。我们可以通过为计时器提供0(或任何10ms以下的任何数值)作为延时时间得到这个值。
但有一个例外,IE为setInterval提供德尔延时时间不能为0(即使setTimeou能欣然的接受)。当setInterval的延时时间为0时,它会转变成setTimeout(仅执行一次回调函数),而我们可以通过为其提供1ms的延迟来解决这个问题。由于所有浏览器都能自动向上舍入任何低于最小延时时间的值,所以用1ms与有效的使用0ms一样安全,或更安全(既然IE浏览器现在能工作)。
从这些表中我们可以得到其它信息。最重要的是加强了我们以前所了解到的:浏览器不能保证你所指定的精确的时间间歇。像Firefox 2,Opera 9(OS)在提供可靠的执行率方面有一定的难度。很多与浏览器如何处理Javascript的垃圾回收有关(Firefox 3在Javascript的执行上作了显著的改善,其垃圾回收在这些结果中立竿见影)。
因此,浏览器可以提供非常小的延迟时间,但其精确度得不到保证,那么在使用计时器时,你需要考虑你的应用程序(如果10ms和15ms有差异,你应该重新思考你应用程序代码的结构)。
未完待续