برنامه نویسی

Throttling در جاوا اسکریپت ساده ترین توضیح✨🚀

Throttling چیست؟

Throttling تکنیکی است که تعداد دفعات فراخوانی یک تابع را در یک بازه زمانی معین محدود می کند. برای بهبود عملکرد و پاسخگویی صفحات وبی که دارای شنونده رویدادهایی هستند که عملیات سنگین یا گران قیمتی مانند انیمیشن ها، اسکرول، تغییر اندازه، واکشی داده ها و غیره را راه اندازی می کنند، مفید است.

به عنوان مثال، اگر تابعی دارید که هر بار که کاربر صفحه را پیمایش می‌کند، مقداری داده را از یک API واکشی می‌کند، ممکن است بخواهید به جای ارسال صدها درخواست در حین پیمایش کاربر، آن را طوری تنظیم کنید که در هر ثانیه فقط یک درخواست ارسال کند. به این ترتیب می توانید از بارگذاری بیش از حد سرور یا مرورگر با درخواست های غیر ضروری جلوگیری کنید و مصرف پهنای باند را کاهش دهید.

چگونه Throttling را در جاوا اسکریپت پیاده سازی کنیم؟

راه های مختلفی برای پیاده سازی throttling در جاوا اسکریپت وجود دارد. یکی از روش های رایج استفاده از تابع تایمر مانند setTimeout یا تفاوت زمان روش (روش قدیمی) برای بسته بندی تابع در حال گاز. تابع تایمر را می توان برای اعمال تاخیر بین تماس های تابع دریچه گاز استفاده کرد و به آن اجازه می دهد فقط یک بار در بازه زمانی مشخص شده فراخوانی شود.

بازنمایی تصویری
در اینجا می توانید ببینید که پس از اجرای موفقیت آمیز عملکرد، تایمر تاخیر مسدود کردن را شروع می کند که همه کلیک ها را مسدود می کند. پس از اتمام تاخیر، کلیک ها را می پذیرد و عملکرد را اجرا می کند.

توضیحات تصویر

در اینجا مثالی از نحوه اجرای تابع دریچه گاز با استفاده از آن آورده شده است setTimeout:

function throttle(mainFunction, delay) {
  let timerFlag = null; // Variable to keep track of the timer

  // Returning a throttled version 
  return (...args) => {
    if (timerFlag === null) { // If there is no timer currently running
      mainFunction(...args); // Execute the main function 
      timerFlag = setTimeout(() => { // Set a timer to clear the timerFlag after the specified delay
        timerFlag = null; // Clear the timerFlag to allow the main function to be executed again
      }, delay);
    }
  };
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استفاده از مورد

// Define a function that fetches some data from an API
function fetchData() {
  console.log("Fetching data...");
  // Simulate an API call with a random delay
  setTimeout(() => {
    console.log("Data fetched!");
  }, Math.random() * 1000);
}

// Throttle the fetchData function with a delay of 5000 ms
const throttledFetchData = throttle(fetchData, 5000);

// Add an event listener to the window scroll event that calls the throttledFetchData function
window.addEventListener("scroll", throttledFetchData);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال، a را تعریف می کنیم throttle تابعی که الف را می گیرد callback و تاخیر به عنوان استدلال. را throttle تابع یک تابع جدید را برمی‌گرداند که آن را می‌پیچد callback با منطقی که استفاده می کند setTimeout برای ایجاد یک تایمر تایمر تضمین می کند که تماس برگشتی فقط یک بار در داخل فراخوانی می شود delay دوره زمانی. اگر تابع برگشتی دوباره قبل از انقضای زمان سنج فراخوانی شود، هیچ کاری انجام نمی دهد.

سپس الف را تعریف می کنیم fetchData تابعی که یک تماس API را با تاخیر تصادفی شبیه سازی می کند. ما استفاده می کنیم throttle تابع ایجاد a throttledFetchData عملکردی که 5000 میلی ثانیه تاخیر دارد. ما یک رویداد شنونده به رویداد اسکرول پنجره اضافه می کنیم که the را فراخوانی می کند throttledFetchData تابع.

اگر این کد را اجرا کنید و صفحه را اسکرول کنید، خواهید دید که fetchData تابع فقط هر 5 ثانیه یکبار فراخوانی می شود، صرف نظر از سرعت یا کندی حرکت شما.

چرا از Throttling استفاده کنیم؟

Throttling می تواند عملکرد و تجربه کاربری صفحات وب را با کاهش تعداد عملیات غیر ضروری یا اضافی بهبود بخشد. همچنین می تواند از برخی مشکلات مانند:

  • بارگیری بیش از حد سرور یا مرورگر با درخواست ها یا محاسبات بسیار زیاد
  • فراتر رفتن از محدودیت نرخ یا سهمیه APIها یا خدمات
  • هدر دادن پهنای باند یا منابع برای عملیاتی که قابل مشاهده یا مربوط به کاربر نیست
  • ایجاد انیمیشن ها یا تعاملات janky یا laggy

مثال غیر فنی از دریچه گاز:

تغییر سرعت فن
هنگام تغییر سرعت فن، چند ثانیه طول می کشد تا به سرعت مورد نظر برسد. بنابراین قبل از تغییر مجدد سرعت، باید چند ثانیه صبر کنیم تا فن به حالت ثابت برسد.

چه زمانی از Throttling استفاده کنیم؟

Throttling برای سناریوهایی مناسب است که می‌خواهید تعداد دفعات فراخوانی یک تابع را محدود کنید، اما نمی‌خواهید هیچ تماسی را از دست بدهید. به عنوان مثال، ممکن است بخواهید از throttling برای موارد زیر استفاده کنید:

  • واکشی داده ها از یک API یا پایگاه داده زمانی که کاربر پیمایش می کند، اندازه را تغییر می دهد یا تایپ می کند
  • به روز رسانی یا متحرک سازی عناصر در صفحه زمانی که کاربر پیمایش می کند، اندازه را تغییر می دهد یا ماوس را حرکت می دهد.
  • ثبت یا ردیابی اقدامات یا رویدادهای کاربر در صورت وقوع مکرر

نتیجه

Throttling تکنیکی است که تعداد دفعات فراخوانی یک تابع را در یک بازه زمانی معین محدود می کند. برای بهبود عملکرد و پاسخگویی صفحات وب که دارای شنوندگان رویداد هستند که عملیات سنگین یا گران قیمت را راه اندازی می کنند مفید است. Throttling را می توان با استفاده از توابع تایمر مانند setTimeout یا setInterval در جاوا اسکریپت پیاده سازی کرد. Throttling برای سناریوهایی مناسب است که می‌خواهید تعداد دفعات فراخوانی یک تابع را محدود کنید، اما نمی‌خواهید هیچ تماسی را از دست بدهید.

امیدوارم این وبلاگ برای شما مفید بوده باشد و چیز جدیدی در مورد throttling در جاوا اسکریپت یاد گرفته باشید. می توانید مقاله من را در این مورد بررسی کنید انحراف در جاوا اسکریپت اینجا.

اگر سؤال یا بازخوردی دارید، لطفاً در زیر نظر دهید. با تشکر برای خواندن! 😊

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا