首頁 > web前端 > js教程 > 主體

JavaScript 中的節流與去抖:初學者指南

王林
發布: 2024-09-07 06:32:09
原創
605 人瀏覽過

Throttling & Debouncing in JavaScript: A Beginner

使用 JavaScript 時,過多的事件觸發器可能會降低應用程式的速度。例如,使用者調整瀏覽器視窗大小或在搜尋列中輸入內容可能會導致事件在短時間內重複觸發,進而影響應用程式效能。

這就是節流和去抖動可以發揮作用的地方。它們可以幫助您在處理過於頻繁觸發的事件時管理呼叫函數的頻率。


?什麼是節流?

限制限制函數的執行頻率。即使事件重複發生,受限的函數只會在每個指定的時間間隔內執行一次。

範例:

想像一下您在一場音樂會上,並且正在拍照。但您決定每 5 分鐘只拍一張照片(無論表演有多精彩)。這就像節流一樣。無論發生多少值得拍照的時刻,您都會堅持每 5 分鐘拍一張照片的規則。

在 JavaScript 中,當您想要追蹤使用者向下捲動頁面的頻率,但您不希望每毫秒觸發該函數時,可以套用此功能。透過限制,您可以控制該函數的執行頻率。

程式碼範例:

function handleScroll() {
  console.log("Scrolled!");
}

window.addEventListener('scroll', throttle(handleScroll, 2000));

function throttle(func, limit) {
  let lastCall = 0;
  return function() {
    const now = new Date().getTime();
    if (now - lastCall >= limit) {
      lastCall = now;
      func();
    }
  };
}
登入後複製

在此範例中,無論使用者滾動的速度有多快或多頻繁,handleScroll 函數只會每 2 秒(2000 毫秒)運行一次。


?什麼是去抖動?

去抖動確保函數僅在一段不活動時間後被呼叫。如果事件持續觸發,函數將不斷重置計時器,並且僅在事件停止後觸發。

範例:

想像一下您正在群組聊天中,並且正在輸入一則訊息。您不想每次按下某個按鍵時都向您的朋友發送通知。相反,您需要等到停止輸入幾秒鐘後再發送「正在輸入...」通知。這就是去抖動——僅在打字暫停後發送通知。

在 JavaScript 中,當使用者在搜尋框中鍵入內容時,經常會使用去抖動。您可以等到使用者停止鍵入一段時間後再執行搜索,而不是在每次按鍵後發送搜尋查詢。

程式碼範例:

function handleInput() {
  console.log("User stopped typing!");
}

const inputField = document.querySelector('input');
inputField.addEventListener('input', debounce(handleInput, 500));

function debounce(func, delay) {
  let timeout;
  return function() {
    clearTimeout(timeout);
    timeout = setTimeout(func, delay);
  };
}
登入後複製

在此範例中,handleInput 函數僅在使用者停止輸入 500 毫秒後執行。



?何時使用節流或去抖?

⚡️ 當您想要控制隨時間推移呼叫函數的頻率時,請使用節流。適合以下活動:

=>捲動
=>調整視窗大小
=>滑鼠移動

⚡️ 當您想要確保僅在事件完成觸發後才呼叫函數時,請使用去抖動。適合以下活動:

=>在搜尋欄輸入
=>表單提交
=>調整視窗大小(用於佈局調整等操作)


結論✅

限制和去抖動是提高 JavaScript 應用程式效能和回應能力的好技術。

它們可幫助您管理函數執行的頻率,防止您的應用程式被太多事件淹沒。

透過了解何時以及如何使用它們,即使在最繁忙的應用程式中,您也可以保持程式碼平穩運行!


編碼快樂! ?

以上是JavaScript 中的節流與去抖:初學者指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!