JavaScript中短時間高頻次觸發事件的最佳化
在瀏覽器中,如果在短時間內多次觸發可以改變DOM樹結構的事件,可能導致頁面機構出現混亂甚至瀏覽器的崩潰。最近在做專案中,我無意中遇到一個問題,當滾到條到達某個高度時,使相應的元素從無到有,但是每次重新整理頁面後第一次到達時,滑鼠滾輪都會停頓下來,經過詢問老師和上網搜尋,發現是監聽捲軸事件造成的,因為捲軸動了一點,就會觸發很多次監聽事件,而且時間是極短的;所以就會造成瀏覽器也來不及反應,要卡在那一會。
後來我總結了幾種解決方法。
一、函式節流
透過函式阻止相同的時間在較短 時間連續觸發
這裡透過200ms的延遲,當下次時間需要執行的時候,如果沒超過200ms,會先清除原來的延時器,從新開始定時;這樣可以保證兩次相同的時間最少間隔在200ms以上。
二、防抖函式
防抖函式使在短時間內多次執行的事件合併成了一個時間在延遲時間後執行;
三、使用 rAF(requestAnimationFrame)
此函式是瀏覽器原生方法,有固定的頻率,每秒執行60次函式,這樣在上次函式還沒結束前,下次函式不會呼叫執行。雖然這個方法效能更最佳化,但是此方法在時間上不能控制。
本文來自千鋒教育,轉載請註明出處。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2778781/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- javascript避免dom事件重複觸發JavaScript事件
- 雙擊事件(dblclick)時,不觸發單擊事件(click)事件
- DOM操作小練習-觸發事件獲取系統時間的程式碼原理事件
- 取消事件觸發事件
- 批量更新時無法觸發事件的解決方法事件
- crontab 每小時觸發一次
- 閉包的使用-高頻事件優化事件優化
- LCP 08. 劇情觸發時間
- jQuery select 觸發事件jQuery事件
- 10個常見觸發IO瓶頸的高頻業務場景
- 分散式系統解耦模式:用事件代表時間觸發Cron計劃任務分散式解耦模式事件
- touch事件和click事件多次觸發的問題事件
- 使用 jQuery 觸發 Vue 事件jQueryVue事件
- 取消事件觸發(妙啊)事件
- js 建立和觸發事件 和 自定義事件JS事件
- 事件溯源中的時間和時間建模 - Tomasz Jaskula事件
- 前端高頻面試題JavaScript篇前端面試題JavaScript
- mvvm模式 事件觸發器[wpf]MVVM模式事件觸發器
- WPF 前臺觸發器實時獲取當前時間觸發器
- Vue事件獲取觸發事件物件和繫結事件物件Vue事件物件
- 資訊洩露事件頻發,拷問AI時代的資料安全事件AI
- storage事件中的坑,storage.setItem()無法觸發storage事件事件
- JavaScript 時間戳JavaScript時間戳
- [JavaScript] 事件委託以及 Vue 列表迴圈事件繫結的效能最佳化JavaScript事件Vue
- python專案例項:抓取網頁時間段內的請求次數、頻寬Python網頁
- JavaScript高頻面試試題2——2020.12.04JavaScript面試
- 瀏覽器的視窗大小被改變時觸發的事件window.onresize瀏覽器事件
- JavaScript計算兩個時間點之間的時間差JavaScript
- html中javascript點選事件後顯示或隱藏某些元素時需要點選兩次才生效的原因分析和最佳化HTMLJavaScript事件
- connection事件當有資料傳送過來時會被觸發事件
- 事件溯源模式:分離事件的發生和捕獲兩種不同時間 - verraes事件模式
- 在SAPCRMWebClientUI中用javascript觸發ABAPeventWebclientUIJavaScript
- ExtJS的grid行編輯外掛事件觸發JS事件
- JavaScript 時間日期操作JavaScript
- 時間戳效能最佳化時間戳
- 【透鏡系列】看穿 > 觸控事件分發 >事件
- withoutEvents函式裡面的事件被觸發函式事件
- select下拉選項,點選時,change事件事觸發多次,請求多次。事件