بهبود شدید کارایی TypeScript در TanStack Table نسخهٔ ۹
خلاصهٔ کاملتر
به گفتهٔ Kevin Van Cott تو بلاگ TanStack، نسخهٔ ۹ کتابخونهٔ Table یه API سطح-تایپ خیلی تواناتر ولی پیچیدهتر از V8 داره. اونقدر پیچیده که اگه از نسخههای آلفای V9 استفاده کرده باشی، احتمالاً یه کندی محسوس تو ادیتورت حس کردی؛ نه اونقدر که سرور تایپاسکریپت کرش کنه، ولی بهقدری که آزاردهنده باشه.
خبر خوب اینه که بین آلفا و آخرین بتا، تیم تونسته کار type-checking تایپاسکریپت رو بین ۶۲ تا ۸۶ درصد تو همهٔ پکیجها و بین ۳۶ تا ۷۹ درصد تو همهٔ مثالهای مستندات کم کنه. نویسنده میگه حالا بتا خیلی سریعتر از آلفاهای هفتهٔ قبل type-check میشه و تجربهٔ ادیتور دوباره «آنی» شده.
نویسنده توضیح میده که چرا تایپهای V9 اصلاً کار بیشتری میکنن. تو V8 عملاً یه تایپ Table واحد داشتی که همهٔ ویژگیها (مرتبسازی، فیلتر، گروهبندی، پین کردن و…) توش پخته شده بود، چه ازشون استفاده میکردی چه نه. این برای تایپاسکریپت راحته، ولی همینم دلیل این بود که V8 نمیتونست ویژگیهای استفادهنشده رو tree-shake کنه و توسعهٔ جدول به declaration-merging سراسری نیاز داشت.
تو V9 ویژگیها ماژولار شدن؛ یعنی دقیقاً همون ویژگیهایی که میخوای رو پاس میدی و هم runtime و هم تایپها از روی همون انتخاب ساخته میشن:
const features = tableFeatures({
rowSortingFeature,
columnFilteringFeature,
paginatedRowModel: createPaginatedRowModel(),
})
const table = useTable({ features, columns, data })برای پشتیبانی از این کار، V9 فقط یه پارامتر جنریک جدید به اسم TFeatures معرفی میکنه. ساده بهنظر میرسه، ولی این پارامتر تو کل سیستم جریان پیدا میکنه و جای یه دسته کامل از declaration-merging سراسری V8 رو با استنتاج per-table میگیره. نتیجهش اینه که جدولی که میگیری فقط APIهای همون ویژگیهایی رو داره که ثبت کردی؛ مثلاً بدون ویژگی مرتبسازی، اصلاً table.setSorting() تو تایپها یا باندل نیست.
نویسنده میگه این تمیزی از اول نبود. تو آلفا هیچ feature map یا helper مشترکی وجود نداشت و منطق انتخاب دستی و شاخهبهشاخه برای هر ویژگی نوشته شده بود و با UnionToIntersection به هم چسبونده میشد؛ همین الگو یکی از منابع اصلی کندی بود. تو بتا این با یه Table_FeatureMap و یه helper مشترک بازنویسی شده که هزینهٔ محاسباتی تایپ رو خیلی پایین آورده.
نکات کلیدی:
- کاهش ۶۲ تا ۸۶ درصدی کار type-checking تایپاسکریپت بین آلفا و بتای V9
- ریشهٔ پیچیدگی: پارامتر جنریک جدید TFeatures و ماژولار شدن ویژگیها
- جدول فقط APIهای ویژگیهای ثبتشده رو داره، بقیه از تایپ و باندل حذف میشن
- الگوی دستی UnionToIntersection تو آلفا یکی از منابع اصلی کندی بود
- جایگزینی declaration-merging سراسری V8 با استنتاج per-table




