تنکاستک ریاکت سرور کامپوننتس رو کنار گذاشت
خلاصهٔ کاملتر
تنر لینزلی، سازندهٔ تنکاستک، تو این پست میگه سایت tanstack.com که یه وقتی نمونهٔ محبوب خودش برای React Server Components بود، حالا برگشته به SSR معمولی. اوایل امسال هر صفحهٔ مستندات حدود ۱.۱ مگابایت اسکریپت میفرستاد که ۳۵۸ کیلوبایتش فقط مال هایلایت سینتکس بود. بردن رندر مارکداون به سرور حدود ۱۵۳ کیلوبایت gzip از باندل کلاینت کم کرد و زمان بلاکشدن ترد اصلی صفحهٔ بلاگ از ۱۲۰۰ به ۲۶۰ میلیثانیه رسید.
به گفتهٔ نویسنده سؤال اصلی این بود که چرا رندر مارکداون و هایلایت کد اصلاً باید ۳۵۸ کیلوبایت خرج برداره. تیم بهجای پنهونکردن اون وابستگی پشت سرور، دو پکیج کوچیک @tanstack/markdown و @tanstack/highlight رو نوشت که فقط همون قرارداد محدودی رو پوشش میدن که سایت لازم داره. رندرر جدید حدود ۲۷ کیلوبایت منتقل میشه، یعنی ۱۸ تا ۱۹ کیلوبایت بیشتر از نسخهٔ RSC، ولی حجم کل صفحهها هنوز کمتر از قبله.
نکتهٔ مهمتر بارگذاریهای بعدیه. تو معماری RSC هر ناوبری یا دادهٔ سروری جدید یه پیلود Flight رندرشده میفرستاد، ولی حالا رندرر یهبار دانلود میشه و سرور فقط دادهٔ تغییرکرده رو میفرسته. اندازهگیریهای محلی نشون میده هر درخواست بین ۱.۵ تا ۵.۶ کیلوبایت gzip صرفهجویی داره و چون هر بازدیدکننده بهطور میانگین حدود شش صفحه میبینه، این صرفهجویی مدام تکرار میشه.
شکایت دوم نویسنده به خود کد برمیگرده. مارکداون از fetchDocs شروع میشد، از فایلهای server-only رد میشد و آخرش بهشکل contentRsc به روت میرسید:
export async function renderMarkdownToRsc(content: string) {
const { content: contentJsx, headings } = await renderMarkdownToJsx(content)
const contentRsc = await renderServerComponent(
React.createElement(React.Fragment, null, contentJsx),
)
return { contentRsc, headings }
}نویسنده میگه خودِ این APIها بد نبودن، ولی شکلی که دور و برشون جمع شده بود — مرزهای رانتایم، تنظیمات باندلر، فایلهای خاص و مقادیر سریالایزشده — باعث میشد یه تغییر ساده تبدیل بشه به سؤالی دربارهٔ گراف وابستگیها.
جمعبندی نویسنده اینه که RSC اشتباه نبود، فقط دیگه هزینهشو درنمیاره. اون معتقده سود فنی واقعی RSC نگهداشتن منطق و وابستگیهای سنگین روی سروره و نه داستان بزرگتر روتینگ و دیتا لودینگ که ریاکت و Next.js دورش میسازن. چون RSC تو TanStack Start اختیاریه، سایت میتونه کنارش بذاره بدون اینکه فریمورک پشتیبانیشو حذف کنه.
نکات کلیدی:
- مسیر مارکداون سایت از RSC به SSR معمولی برگشت
- رندرر جدید حدود ۲۷ کیلوبایت ـه، فقط ۱۸ تا ۱۹ کیلوبایت بیشتر از نسخهٔ RSC
- حجم و TBT هر دو مسیر اندازهگیریشده نسبت به نسخهٔ RSC بهتر شد
- بهجای پیلود Flight در هر ناوبری، حالا فقط دادهٔ تغییرکرده فرستاده میشه
- RSC تو TanStack Start همچنان پشتیبانی میشه، ولی اختیاریه




