requestAnimationFrame與setInterval均可以實現循環觸發事件,可是setInterval是基於時間的,而requestAnimationFrame是基於幀數的,在個人一次開發彈幕的項目中,在一開始使用了setInterval來切換彈幕的位置,起初並無什麼問題,可是當瀏覽器切換回後臺後,就會出現彈幕積攢過多的緣由,由於我隨不斷的建立新的彈幕進行移動(爲了考慮性能,會優先使用已經被廢棄的彈幕盒),當瀏覽器切換到後臺後,瀏覽器自己已經不進行頁面渲染了,而個人定時器卻在不斷的建立新的彈幕以用來發射,當用戶將瀏覽器切換到前臺時候,會看到在一段時間內積攢的彈幕堆積到一塊兒,最後發現是由於 瀏覽器在後臺的時候 定時器仍是會不斷的跑的,可是在當前這種狀況下 我可能並非很但願彈幕系統繼續運行下去,我但願知道瀏覽器當前狀態是在前臺仍是後臺,若是是後臺的話 則暫停彈幕,然而在微信中並無看到相關的機制,後來看到了requestAnimationFrame,requestAnimationFrame也是不斷的循環執行事件,可是他是按幀執行的,並且有一個好處是 當瀏覽器切換到後臺後,requestAnimationFrame是不會再去執行事件了。這和setInterval有着本質的差別。而requestAnimationFrame之因此在瀏覽器進入後臺不去執行的緣由 ,應該是和瀏覽器進入後臺後不去渲染界面有關,由於渲染界面後須要逐幀繪製,當不進行頁面的選而後,也就不必去執行幀操做了,因此requestAnimationFrame也不會去執行了瀏覽器
若是上述推論是正確的,那能夠基此判斷出setTimeout在瀏覽器進入後臺後依然會運行,就像setInterval同樣微信