setTimeout的延時為0時多個瀏覽器的區別

來源:互聯網
上載者:User

由於不是很瞭解瀏覽器的內部執行策略,本文只能是通過前端一些測試依稀猜測些結論:
1)測試舉例
做了兩個例子:
1-1)指令碼在頁面中直接執行,通過重新整理看結果
複製代碼 代碼如下:
<!DOCTYPE HTML>
<HTML>
<HEAD>
<script type="text/javascript">
var t=new Date;
setTimeout(function(){
alert('cost time:'+(new Date-t))
},0);
</script>
</HEAD>
<BODY>
</BODY>
</HTML>


測試結果: 
 
  在ie各個版本瀏覽器下,得到的alert結果大體為:14左後,區間為8~21毫秒之間;
  chrome19,基本為1,區間為1~5之間,但是偶爾會是15左右
  firefox12,基本為3,區間為2~7之間,但是偶爾也有15左右的值
  safari5.1,基本為4,區間為1~7之間,但是偶爾也有15左右的值
  opera11.5,基本為5,區間為2~8之間,但是偶爾有很大值

1-2)通過點擊div看結果

複製代碼 代碼如下:
<!DOCTYPE HTML>
<HTML>
<HEAD>
<script type="text/javascript">
function test(){
var t=new Date;
setTimeout(function(){
alert('cost time:'+(new Date-t))
},0);
}
</script>
</HEAD>
<BODY>
<div onclick='test()' id="div1" style="position:relative;width:200px;height:200px;background-color:green;left:100px;top:100px;">
</div>
</BODY>
</HTML>

測試結果:  
  在ie各個版本瀏覽器下,得到的alert結果大體為: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等。因為大值重複出現幾率很少。
 
總結:其實我是沒有得出結論,只是好奇,然後猜測,看看可能是情況和結果,希望大家批評指正。或者有結論的回覆我。
另外:setTimout函數中第二個參數如果為負數,則和0具有一樣的效果,如果setTimeout(function(){console.log('test')},-100);等同於setTimeout(function(){console.log('test')},0)。
我以為會報錯,結果所有瀏覽器都沒有報錯。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.