cnfast: جایگزین سریع cn برای پروژههای تیلویند
خلاصهٔ کاملتر
به گفتهٔ سازنده، cnfast یه جایگزین مستقیم برای تابع پرکاربرد cn هست؛ همون تابعی که تو پروژههای ریاکت و مخصوصاً shadcn/ui کلاسهای تیلویند رو با هم ترکیب و مرج میکنه. ادعای اصلی مقاله اینه که این کتابخونه همون کارو انجام میده ولی خیلی سریعتر، بدون اینکه لازم باشه کدت رو دست بزنی.
طبق بنچمارکهایی که تو مخزن اومده، cnfast بهطور میانگین ۳.۸ برابر سریعتر از tailwind-merge اجرا میشه و رو کدهای پُر از کامپوننت این عدد تا ۷ برابر هم میره. نکتهٔ مهم اینه که خروجیش دقیقاً بایتبهبایت مثل tailwind-merge هست، پس رفتار ظاهری پروژه هیچ فرقی نمیکنه.
استفادهش هم خیلی سادهست: چون API یکیه، فقط کافیه بهجای ساختن cn از ترکیب clsx و twMerge، مستقیم از cnfast importش کنی:
// before
export const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs));
// after
export { cn } from "cnfast";یه قابلیت جالبش استفاده بهشکل tagged template هست. تو این حالت cn نتیجه رو بر اساس هویت محل فراخوانی کش میکنه، پس دفعههای بعد دیگه لازم نیست دوباره join و hash انجام بشه. سازنده میگه یه محل فراخوانی ثابت تا ۴.۳ برابر سریعتر از tailwind-merge میشه، هرچند رو موتور V8 چون فرم معمولی cn(...) هم آرگومانهاش رو کش میکنه، فاصله به حدود ۱.۲ برابر میرسه.
نویسنده تأکید میکنه که این سرعت کجا واقعاً به درد میخوره: cn بهازای هر المان یه بار اجرا میشه، پس هزینهش با حجم رندر بالا میره. رو یه صفحهٔ کوچیک یا کمتغییر این تفاوت تو حد نویز اجراست، ولی رو اپهایی که مدام رندر میشن مثل دیتاگریدها و داشبوردهای زنده که هزاران بار در ثانیه صداش میزنن، یه cn سریعتر کمک میکنه فریمها تو بودجه بمونن.
مقاله میگه cnfast کد MIT-licensed از clsx و tailwind-merge رو اقتباس کرده و برای مهاجرت هم یه دستور آماده داره که یه پروژهٔ موجود با clsx یا classnames یا tailwind-merge رو یکجا سوییچ میکنه. البته باندلش کمی بزرگتره: حدود ۹.۴۳ کیلوبایت گزیپشده در برابر ۸.۴۵ کیلوبایت برای نسخهٔ پایه.
نکات کلیدی:
- cnfast یه جایگزین drop-in برای cn هست با همون API و خروجی بایتبهبایت یکسان
- بهطور میانگین ۳.۸ برابر و رو کد پُر کامپوننت تا ۷ برابر سریعتر از tailwind-merge
- فرم tagged template با کشکردن بر اساس محل فراخوانی سرعت بیشتری میده
- بیشترین سود رو اپهای پُررندر مثل دیتاگرید و داشبورد زنده دیده میشه
- باندلش کمی بزرگتر از نسخهٔ پایهست (۹.۴۳ در برابر ۸.۴۵ کیلوبایت گزیپشده)




