摘要:有一些事件是會頻繁觸發(fā)的,比如如果在這些事件上綁定函數(shù),并且這些函數(shù)要進行耗性能的計算,那么會導致頁面忽急忽緩,反應遲鈍這時就需要使用節(jié)流事件來控制函數(shù)被觸發(fā)的頻率。
有一些事件是會頻繁觸發(fā)的,比如scroll resize mousemove keyup
如果在這些事件上綁定函數(shù),并且這些函數(shù)要進行耗性能的計算,那么會導致頁面忽急忽緩,反應遲鈍,這時就需要使用節(jié)流事件來控制函數(shù)被觸發(fā)的頻率。
function handler() { // 處理一些耗性能的計算 // 或者發(fā)送ajax請求 console.log("2333"); } $(window).scroll(handler); // 反復觸發(fā)handler,影響性能方法一 setTimeout
var timer = 0; $(window).scroll(function() { if (!timer) { timer = setTimeout(function() { handler(); timer = 0; }, 1000); } });方法二 setInterval
// scroll雖然綁定了一個會頻繁觸發(fā)的函數(shù),但是該函數(shù)只是改變scrolled的值,不會影響性能 var scrolled = false; $(window).on("scroll", function() { scrolled = true; }); setInterval(function() { if (scrolled) { handler(); scrolled = false; } }, 1000);
想象一個場景:實時搜索
在輸入框輸入關鍵詞后就要馬上顯示結果,通常做法是在keyup上綁定handler處理函數(shù),發(fā)送ajax請求。但是如果用戶輸入速度很快,那么keyup會觸發(fā)多次,發(fā)送多個ajax請求,而我們只是想要在用戶停止輸入的時間超過1s后才發(fā)送ajax
這和前面的scroll事件又有些不同,在這里我只想handler函數(shù)在keyup觸發(fā)后執(zhí)行一次
前面兩種方法只是減少了handler()觸發(fā)的頻率,但是仍然會觸發(fā)多次
var searchTimeout = null; $("#input").on("keyup", function(event) { //每次keyup時直接取消上次計時器,只有當keyup超過1s時才執(zhí)行handler clearTimeout(searchTimeout); searchTimeout = setTimeout(function() { handler(); }, 1000); });
參考:《jQuery基礎教程》
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/80808.html
摘要:文件為函數(shù)要傳入的參數(shù)返回事件處理函數(shù)添加事件監(jiān)聽節(jié)流函數(shù)一般用于事件的情況較多,因為這些事件的觸發(fā)是連續(xù)性的,需要在一個時間間隔內只觸發(fā)一次。 showImg(https://segmentfault.com/img/remote/1460000018998747); 閱讀原文 前言 在前端開發(fā)當中我們經(jīng)常會綁定一些事件觸發(fā)的某些程序執(zhí)行,有時這些事件會連續(xù)觸發(fā),如瀏覽器窗口 s...
摘要:此時需要采用防抖和節(jié)流的方式來減少調用頻率,同時不影響原來效果。函數(shù)防抖當持續(xù)觸發(fā)事件時,一段時間段內沒有再觸發(fā)事件,事件處理函數(shù)才會執(zhí)行一次,如果設定的時間到來之前就觸發(fā)了事件,延時重新開始。 js 防抖 節(jié)流 JavaScript 實際工作中,通過監(jiān)聽某些事件,如scroll事件檢測滾動位置,根據(jù)滾動位置顯示返回頂部按鈕;如resize事件,對某些自適應頁面調整DOM的渲染;如ke...
摘要:本文會分別介紹什么是防抖和節(jié)流,它們的應用場景,和實現(xiàn)方式。防抖和節(jié)流都是為了解決短時間內大量觸發(fā)某函數(shù)而導致的性能問題,比如觸發(fā)頻率過高導致的響應速度跟不上觸發(fā)頻率,出現(xiàn)延遲,假死或卡頓的現(xiàn)象。 本文由小芭樂發(fā)表 0. 引入 首先舉一個例子: 模擬在輸入框輸入后做ajax查詢請求,沒有加入防抖和節(jié)流的效果,這里附上完整可執(zhí)行代碼: 沒有防抖 ...
摘要:一什么是節(jié)流節(jié)流函數(shù)就是讓事件處理函數(shù)在大于等于執(zhí)行周期時才能執(zhí)行,周期之內不執(zhí)行,即事件一直被觸發(fā),那么事件將會按每小段固定時間一次的頻率執(zhí)行。我們通過一個簡單的示意來理解節(jié)流函數(shù)可以用時間戳和定時器兩種方式進行處理。 本文共 2000 字,讀完只需 8 分鐘 上一篇文章講了去抖函數(shù),然后這一篇講同樣為了優(yōu)化性能,降低事件處理頻率的節(jié)流函數(shù)。 一、什么是節(jié)流? 節(jié)流函數(shù)(thrott...
摘要:為什么需要函數(shù)防抖和函數(shù)節(jié)流在瀏覽器中某些計算和處理要比其他的昂貴很多。函數(shù)防抖如果一個事件被頻繁觸發(fā)多次,并且觸發(fā)的時間間隔過短,則防抖函數(shù)可以使得對應的事件處理函數(shù)只執(zhí)行最后觸發(fā)的一次。函數(shù)防抖可以把多個順序的調用合并成一次。 1.為什么需要函數(shù)防抖和函數(shù)節(jié)流? 在瀏覽器中某些計算和處理要比其他的昂貴很多。例如DOM操作比起非DOM交互需要更多的內存和CPU占用時間。連續(xù)嘗試進行...
摘要:防抖和節(jié)流連續(xù)觸發(fā)觸發(fā)頻率很高的時間,不進行優(yōu)化,會出現(xiàn)頁面卡頓現(xiàn)象。節(jié)流防抖是多次觸發(fā)事件,目標函數(shù)只執(zhí)行一次,不管觸發(fā)這些事件用了多少時間。 防抖(debounce)和節(jié)流(throttle) 連續(xù)觸發(fā)(觸發(fā)頻率很高)的時間,不進行優(yōu)化,會出現(xiàn)頁面卡頓現(xiàn)象。常見的需要優(yōu)化的事件: 鼠標事件: mousemove(拖拽) mouseover(劃過) mouseWheel(滾屏)...
閱讀 3670·2021-09-22 15:15
閱讀 3572·2021-08-12 13:24
閱讀 1319·2019-08-30 15:53
閱讀 1830·2019-08-30 15:43
閱讀 1191·2019-08-29 17:04
閱讀 2802·2019-08-29 15:08
閱讀 1593·2019-08-29 13:13
閱讀 3093·2019-08-29 11:06