手机版

当setTimeout的延迟为0时 多个浏览器之间的差�

时间:2021-10-09 来源:互联网 编辑:宝哥软件园 浏览:

因为不太了解浏览器的内部执行策略,本文只能通过一些前端测试来猜测一些结论:1)测试示例中给出了两个示例:1-1)脚本在页面中直接执行,通过刷新结果复制代码如下:DOCTYPE HTML HTML HEAD脚本类型=' text/JavaScript ' var t=new Date;setTimeout(function(){ alert(' cost time : '(new Date-t))},0);/script /HEAD BODY /BODY /HTML测试结果:在各种版本的ie浏览器下,告警结果大致为:还剩14个,间隔8~21毫秒;Chrome19,基本为1,范围从1到5,但偶尔firefox12,基本为3,范围从2到7,但偶尔safari5.1,基本为4,范围从1到7,偶尔opera11.5,基本为5,范围从2到8,但偶尔非常大。DOCTYPE HTML HTML HEAD脚本类型='text/javascript '函数测试(){ var t=new DatesetTimeout(function(){ alert(' cost time : '(new Date-t))},0);}/script/HEAD BOdy div onclick=' test()' id=' div 1 ' style=' position : relative;宽度width:200px高度:200 px;背景-颜色:绿色;left:100px' top:100px'/div /BODY /HTML测试结果:在各种版本的ie浏览器下,得到的预警结果大致如下:还剩5个,偶尔有大值;Chrome19,基本2,偶尔3 firefox12,基本1,0,2,但偶尔13左右safari5.1,基本1,偶尔2和3 opera11.5,基本4,3,但偶尔12左右。上述测试都是在单个选项卡或打开多个页面的选项卡中进行的,这会干扰复杂性。结果差不多。2)什么意思?其实我得不到什么结论,但测试结果基本反映了js脚本在当前流行浏览器中的效率排名。原因可以确认如下:2-1)由于js的主执行线程是单线程,这个值一般必须大于0,setTimeout的执行时间只是添加到js主执行队列的时间。至于什么时候执行,是由依次执行的js引擎线程的队列决定的。这个结论很多地方都提到过。可以自己检查(比如JavaScript可以多线程吗?深入理解JavaScript计时机制);这个结论也印证了setTimeout在非常热的时候动画不流畅的原因。顺便说一下,这里贴的一张带背光的图片很能说明问题:

3-2)测试偶尔出现的大值,也可能是js主执行线程做了其他事情,比如GC等。因为大值复发的概率很小。总结:其实我没有下结论,只是好奇。然后我就猜到了,看了可能的情况和结果,希望大家批评指正。或者给我一个结论性的答案。另外:如果settimeout函数中的第二个参数为负,则与0有相同的效果,如果settimeout(function(){ console . log(' test ')},-100);相当于settimeout(function(){ console . log(' test ')},0)。我以为我会报告错误,但不是所有浏览器都报告错误。

版权声明:当setTimeout的延迟为0时 多个浏览器之间的差�是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。