Fig: یه جایگزین سبکتر برای React با ایدههای تازه
خلاصهٔ کاملتر
یه توسعهدهنده به اسم bgub کتابخونهای به اسم Fig منتشر کرده؛ یه runtime سبک TypeScript برای ساخت اپ و متافریمورک، الهامگرفته از React (کامپوننت، Fiber، هیدریشن، state) ولی با سمانتیکهای بومی پلتفرم بهجای الگوهای React، مثلا AbortSignal بهجای cleanup سفارشی. به گفتهی سازنده، Fig از Remix 3 هم الهام گرفته و فعلا pre-1.0 ـه: رندرر DOM، SSR استریمی، هیدریشن و پروتکل payload پیاده و تست شدن، ولی اکوسیستمش هنوز کوچیکه و ممکنه APIها قبل از نسخه ۱ عوض بشن.
یکی از تفاوتهای اصلی Fig اینه که مدیریت دیتا از اول توش تعبیه شده: دیتا-ریسورسهایی با قابلیت دیدوپلیکیت، Suspense، invalidation، refresh و کنسلکردن. کامپوننتهای payload هم همون سرور کامپوننتهای آشنان، با این فرق که یه payload tree خودش یه مقدار دیتا-ریسورسه و از همون APIهای دیتا رفرش میشه، نه یه مسیر جدا. این ویژگی الان با TanStack Start هم یکپارچه شده.
یه اصل دیگهی Fig اینه که هر «طول عمری» - افکت، event handler، بایندینگ DOM، transition، اکشن یا دیتا لودر - با یه AbortSignal مشخص میشه؛ وقتی وابستگیها عوض میشن یا کامپوننت unmount میشه، همون سیگنال abort میشه:
useReactive(
(signal) => {
const socket = new WebSocket(`/rooms/${roomId}`);
signal.addEventListener("abort", () => socket.close(), { once: true });
},
[roomId],
);این یعنی بهجای اینکه هر API یه قرارداد cleanup جدا داشته باشه (مثل useEffect تو React)، همهشون از یه الگوی یکسان پیروی میکنن.
از نظر حجم، Fig تقریبا نصف React ـه: نسخهی minified اون ۹۲.۵ کیلوبایت و بعد از gzip ۲۹.۳ کیلوبایته، در حالی که React 19.2.7 به ترتیب ۱۹۴.۱ و ۶۰.۳ کیلوبایته؛ یعنی حدود ۵۲ درصد کوچیکتر. اصول طراحی Fig هم رو کوچیک و مینیمال بودن، استفاده از سمانتیکهای بومی پلتفرم، و اضافهنکردن APIهای React مگه اینکه واقعا به Fig قدرت اضافه کنن، تاکید داره.
نکات کلیدی:
- Fig یه runtime سبک TypeScript الهامگرفته از React ـه، با تمرکز روی سمانتیکهای بومی پلتفرم
- حجم Fig تقریبا نصف React ـه: ۲۹.۳ کیلوبایت در مقابل ۶۰.۳ کیلوبایت بعد از gzip
- همهی «طول عمرها» (افکت، هندلر، لودر دیتا و…) با AbortSignal مدیریت میشن
- الان با TanStack Start یکپارچه شده و از کامپوننتهای payload پشتیبانی میکنه
- هنوز pre-1.0 ـه و ممکنه APIهاش قبل از نسخه ۱ تغییر کنن




