TanStack Pacer: مدیریت زمانبندی رویدادها و کارهای async
خلاصهٔ کاملتر
تیم TanStack یه کتابخونهٔ جدید به اسم Pacer معرفی کرده که الان تو مرحلهٔ بتا هست. کارش اینه که برای رویدادهای پرتکرار (مثل تایپ کردن یا حرکت موس) و کارهای async یه مدل زمانبندی مشترک بده. یعنی به جای اینکه هر جا یه تایمر دستی بنویسی، debounce، throttle، rate limiting، صف (queue) و batch رو از یه جا و با یه منطق یکسان برداری.
حرف اصلی صفحهٔ معرفی اینه که روش رو بر اساس «چیزی که میتونی از دست بدی» انتخاب کن، نه تایمری که یادت مونده. debounce (یعنی صبر کن تا رویدادها آروم بشن، بعد فقط آخری رو اجرا کن) برای ورودی جستجو خوبه. throttle یه نمونهٔ منظم نگه میداره و وسطیها رو دور میریزه، مناسب آپدیتهای اشارهگر. rate limit فقط تماسهای داخل سهمیه رو قبول میکنه و بقیه رو رد میکنه، مثلاً برای درخواستهای API.
دو روش دیگه هیچ کاری رو دور نمیریزن. queue همهٔ کارها رو نگه میداره ولی همزمانی (concurrency) رو کنترل میکنه، مثلاً برای آپلود فایل. batch هم همهٔ آیتمها رو نگه میداره ولی اجراشون رو گروهی میکنه، مثل نوشتن دادههای آنالیتیکس. تو بخش صف، ترتیب، اولویت، تعداد worker، انقضا، retry و لغو کردن همه جزو خود مدل هستن. یعنی backpressure (وقتی کار سریعتر از توان پردازش میاد) به یه رفتار مشخص تو محصول تبدیل میشه.
نکتهٔ دیگه اینه که وضعیت تایمرها دیگه تو یه closure گم نمیشه. میتونی به تعداد اجراها، کارهای در انتظار، خطاها و وضعیت کلی subscribe کنی و همین مدل رو تو devtools هم ببینی:
queue.store.subscribe(state => {
renderProgress(state.executionCount)
})Pacer از سه لایه ساخته شده: core، adapter مخصوص هر فریمورک و devtools. اگه فقط به هسته نیاز داری، میتونی همون رو تنها استفاده کنی.
نکات کلیدی:
- Pacer هنوز تو وضعیت beta هست و بخشی از اکوسیستم TanStack حساب میشه.
- پنج روش داره: debounce، throttle، rate limit، queue و batch.
- debounce آخرین مقدار رو نگه میداره، throttle وسطیها رو حذف میکنه و rate limit تماسهای اضافه رو رد میکنه.
- queue و batch هیچ کاری رو دور نمیریزن؛ یکی همزمانی رو کنترل میکنه و یکی اجراها رو گروه میکنه.
- صفها از اولویت، تعداد worker، retry، انقضا و لغو پشتیبانی میکنن.
- وضعیت هر pacer از طریق store.subscribe و devtools قابل دیدنه.




