時間碎片化
總所周知闲先,瀏覽器是單線程運行的(web worker除外)摧找,當一個按鈕點擊的過程中,會產(chǎn)生UI事務和JavaScript事務喇完,同時推送到隊列中伦泥,等待執(zhí)行。
業(yè)務較復雜的腳本執(zhí)行耗時較長處理時間超過100ms
時,導致UI更新和其他腳本事件無法執(zhí)行不脯,影響用戶體驗府怯。
定時器的出現(xiàn)就是為了解決這個問題,設計理念是將復雜的腳本事務切割成單個事務防楷,讓耗時的事務讓出時間牺丙,切換任務執(zhí)行。
代碼塊
var btn = document.getElementById('myBtn');
btn.onclick = function(){
onProcessMethod();
setTimeout(function(){
this.style.backgroundcolor = 'red';
},50);
finishedProcessMethod();
};
定時器中的事件會放到任務隊列中复局,當btn.onclick事件執(zhí)行完成之后赘被,隊列中的定時器事件開始執(zhí)行,這樣做的意義在于保證btn.onclik事件完整執(zhí)行肖揣,50ms這個參數(shù)并不保證定時器事件一定執(zhí)行民假。
Tips:setInterval()和setTimeout()最大的區(qū)別在于前者會重復向隊列中推送任務