三張圖理解JS高級定時器

圖片出自JS高程(第三版)數組

clipboard.png

圖一解讀:JS運行於單線程的環境中:頁面載入時授限制性<script>元素中的代碼;以後JS進程將等待更多代碼執行;當進程空閒時,下一個代碼會被觸發並馬上執行。函數

當有大量JS邏輯代碼待處理時,JS進程就會擁堵(由於要在同一個進程中,按順序挨個執行),表現上就是網頁卡死。性能

clipboard.png

圖二解讀:定時器能夠在指定時間把定時器代碼加入待執行隊列,但並不能保證代碼執行時機,待執行隊列中的代碼要等JS進程空閒時才能執行。優化

clipboard.png

圖三解讀:setInterval每隔delay間隔嘗試建立定時器代碼實例並加入待執行隊列,但爲了不定時器代碼連續運行好幾回,若當前待執行隊列中已有定時器代碼實例,將不會建立新的定時器代碼實例加入待執行隊列。spa

也就是說setInterval定時器每隔delay間隔觸發一次,嘗試加入隊列,JS擁堵時段將直接忽略本次操做。線程

這能夠保證setInterval定時器推入隊列的間隔必定不小於delay間隔,但不能保證其執行間隔。能夠採用鏈式setTimeout能夠保證其執行間隔。設計

綜:以上是對定時器的我的理解,對此的重要應用有幾點——數組分塊、函數節流和防抖等。主要是針對JS特性,經過設計實現方式來優化其性能問題。隊列

相關文章
相關標籤/搜索