دو روش مختلف هندل کردن یک ایونت. Debouncing و Throttling
قبل از اینکه به موضوع اصلی برسیم اول بیایید بینیم یک ایونت اصلا چی هستش.
یک مثال خیلی ساده از یک ایونت میتونه یک سرچ باکس باشه، برای مثال یک سرچ باکس یک وبسایت فیلم. زمانی که یوزر شروع به تایپ کردن اسم فیلمی که میخواد جستوجو کنه میکنه با هر لغتی که تایپ میکنه یک ایونت ساخته میشه، اما حالا سوال اینجاست که این ایونت رو چطور هندل کنیم و چه زمانی درخواست رو برای بک اند ارسال کنیم تا نتایج جستوجو رو دریافت کنیم؟
روش پیشفرض: حالت پیشفرض(دیفالت) اینه که با هر لغتی که یوزر تایپ کرد یک درخواست به بکاند بزنیم محتوا دانلود کنیم و لیست رو نشون بدیم. مشکل این ماجرا کاملا مشخص شما نه تنها درخواست بیش از اندازه به بکاند میزنید بلکه کلاینت هم باید یک فانکشن رو بارها اجرا کنه که نتیجه اش کند شدن کلاینت و بکاند خواهد بود.
Debouncing:
در این روش شما یک تایمر اصلی دارید. فرض کنیم تایمر ما هر ۵ ثانیه است. زمانی که یوزر شروع به تایپ کردن لغات میکنه ما فانکشن رو صدا میزنیم اما این بار فانکشن ۵ ثانیه صبر میکنه قبل از ارسال درخواست و اگر در این ۵ ثانیه ایونت جدیدی ساخته شد ( کاربر لغت جدیدی تایپ کنه) تایمر ۵ ثانیه ریست میکنه و دوباره ۵ ثانیه صبر میکنه، در نتیجه شما تنها زمانی درخواست رو ارسال میکنید که از اخرین چیزی که کاربر نوشته باشه ۵ ثانیه گذشته باشه، اینطوری نه تنها کلاینت شما منابع کمتری استفاده میکنه بلکه بک اند هم درخواستهای کمتری دریافت میکنه.
Throttling:
در این روش ما بازهم یک تایمر داریم اما تفاوت این روش با روش debouncing اینه که بلافاصه که یوزر شروع به تایپ کردن لغتی کرد ما درخواست به بکاند ارسال میکنیم و بعدش ۵ ثانیه صبر میکنیم و دوباره هرچیزی که یوزر نوشته بود ارسال میکنیم و این رو تا ابد انجام میدیم مگر اینکه از اخرین باری که فانکشن اجرا شده باشه تغییری رخ نداده باشه. در نتیجه تو این روش فانکشن در یک بازه زمانی مشخص همیشه اجرا میشه.
البته throttling خیلی گزینه خوبی برای این مثال نیست و debounce گزینه درست هندل کردن این مثال هست.
@TorhamDevCH
Post #18
1.06K
- ❤ 3
- 👍 1