定時(shí)器的設(shè)計(jì)理念

時(shí)間碎片化

總所周知,瀏覽器是單線程運(yùn)行的(web worker除外),當(dāng)一個(gè)按鈕點(diǎn)擊的過程中,會(huì)產(chǎn)生UI事務(wù)和JavaScript事務(wù),同時(shí)推送到隊(duì)列中,等待執(zhí)行。

業(yè)務(wù)較復(fù)雜的腳本執(zhí)行耗時(shí)較長(zhǎng)處理時(shí)間超過100ms時(shí),導(dǎo)致UI更新和其他腳本事件無法執(zhí)行,影響用戶體驗(yàn)。
定時(shí)器的出現(xiàn)就是為了解決這個(gè)問題,設(shè)計(jì)理念是將復(fù)雜的腳本事務(wù)切割成單個(gè)事務(wù),讓耗時(shí)的事務(wù)讓出時(shí)間,切換任務(wù)執(zhí)行。

代碼塊

var btn = document.getElementById('myBtn');
btn.onclick = function(){
  onProcessMethod();
  setTimeout(function(){
      this.style.backgroundcolor = 'red';
    },50);
  finishedProcessMethod();
};

定時(shí)器中的事件會(huì)放到任務(wù)隊(duì)列中,當(dāng)btn.onclick事件執(zhí)行完成之后,隊(duì)列中的定時(shí)器事件開始執(zhí)行,這樣做的意義在于保證btn.onclik事件完整執(zhí)行,50ms這個(gè)參數(shù)并不保證定時(shí)器事件一定執(zhí)行。

Tips:setInterval()和setTimeout()最大的區(qū)別在于前者會(huì)重復(fù)向隊(duì)列中推送任務(wù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,001評(píng)論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • 從哪說起呢? 單純講多線程編程真的不知道從哪下嘴。。 不如我直接引用一個(gè)最簡(jiǎn)單的問題,以這個(gè)作為切入點(diǎn)好了 在ma...
    Mr_Baymax閱讀 2,910評(píng)論 1 17
  • 瀏覽器UI線程(The Browser UI Thread) 用于執(zhí)行JavaScript代碼和更新界面的進(jìn)程被稱...
    梁同學(xué)de自言自語閱讀 538評(píng)論 2 0
  • 一大早的鬧鐘就開始響了 你看沒有你的日子我起床很順利 只是我習(xí)慣性的像你一樣學(xué)會(huì)賴床 我今天要起來給自己畫妝 讓自...
    憤怒的小鋼琴閱讀 317評(píng)論 0 0

友情鏈接更多精彩內(nèi)容