کامپایلر ری اکت (React Compiler) یک ابزار جدید در زمان ساخت پروژه (Build-Time) است که به صورت کاملاً خودکار برنامههای React شما را بهینهسازی میکند. این کامپایلر با کدهای جاوااسکریپت استاندارد کار میکند و با درک عمیق «قوانین راکت» (Rules of React)، بدون نیاز به تغییر یا بازنویسی کدها، کارایی برنامه را بالا میبرد.
در برنامههای بزرگ، جابهجایی وضعیتها (States) ممکن است باعث رندر مجدد (Re-render) بخشهای زیادی از صفحه شود. React به خودی خود سریع است، اما گاهی برای حفظ سرعت و نرمی برنامه، توسعهدهندگان مجبورند کامپوننتها و مقادیر را به صورت دستی مموایز (Memoize/ذخیره در حافظه) کنند.
این فرآیند دستی (با ابزارهایی مثل useMemo و useCallback) خستهکننده است، نگهداری کد را سخت میکند و به راحتی ممکن است در نوشتن آن اشتباه کنید. کامپایلر راکت این بار ذهنی را کاملاً از دوش شما برمیدارد.
بدون کامپایلر، برای جلوگیری از رندرهای اضافه ناچار بودید کدهای خود را غرق در هوکهای بهینهسازی کنید:
import { useMemo, useCallback, memo } from 'react';
const ExpensiveComponent = memo(function ExpensiveComponent({ data, onClick }) {
// بهینهسازی دستی محاسبات سنگین
const processedData = useMemo(() => {
return expensiveProcessing(data);
}, [data]);
// بهینهسازی دستی توابع
const handleClick = useCallback((item) => {
onClick(item.id);
}, [onClick]);
return (
<div>
{processedData.map(item => (
// باگ پنهان: تابع Arrow Function زیر، در هر رندر یک نمونه جدید میسازد
// و عملاً بهینهسازی کامپوننت Item را خراب میکند!
<Item key={item.id} onClick={() => handleClick(item)} />
))}
</div>
);
});
با ورود کامپایلر راکت، شما دقیقاً همان کد را بدون نیاز به هیچگونه هوکِ بهینهسازی دستی، کاملاً ساده و روان مینویسید. کامپایلر خودش در زمان خروجی گرفتن از پروژه، بهترین نوع ذخیرهسازی در حافظه را اعمال میکند:
// نیازی به لود کردن useMemo، useCallback یا memo نیست!
function ExpensiveComponent({ data, onClick }) {
const processedData = expensiveProcessing(data);
const handleClick = (item) => {
onClick(item.id);
};
return (
<div>
{processedData.map(item => (
// کامپایلر حتی این فلشفانکشن را هم بهینهسازی میکند تا کامپوننت Item بیهوده رندر نشود
<Item key={item.id} onClick={() => handleClick(item)} />
))}
</div>
);
}
بله، کامپایلر به پایداری (Stable) رسیده و به صورت گسترده در پروژههای عظیمی مثل شرکت Meta (اینستاگرام و فیسبوک) در محیط عملیاتی تست شده است. با این حال، موفقیت آمیز بودن اجرای آن در پروژه شما به این بستگی دارد که چقدر در کدهای خود قوانین اصلی React (مانند عدم تغییر مستقیم اموال یا عدم دستکاری پوزیشنها) را رعایت کرده باشید.
کامپایلر راکت را میتوان روی ابزارهای ساخت محبوبی مثل Babel، Vite، Metro و Rsbuild نصب کرد.
در اصل، این کامپایلر یک افزونه برای Babel است. اما تیم توسعه در حال همکاری با پروژههای SWC و Oxc است تا در آینده بدون نیاز به بابل، به طور بومی در پایپلاینهای ساخت قرار گیرد.
کاربران فریمورک Next.js (نسخه 15.3.1 به بالا) میتوانند این کامپایلر را به صورت مستقیم و از طریق موتور فوقالعاده سریع SWC فعال کنند.
useMemo و useCallback) چه میشود؟برای کدهای جدید: کاملاً به کامپایلر اعتماد کنید و نیازی به نوشتن دستی این هوکها ندارید؛ مگر در موارد خاص که نیاز به کنترل ۱۰۰٪ دقیق دارید (مثلاً وابستگیهای یک useEffect که نباید تحت هیچ شرایطی تغییر کند).
برای کدهای قدیمی پروژه: پیشنهاد میشود هوکهای قدیمی را حذف نکنید (چون حذف آنها ممکن است رفتار کامپایلر را دستخوش تغییر کند) یا اگر قصد حذف دارید، حتماً پروژه را به دقت تست کنید.
برای راهاندازی و استفاده موثر، مستندات رسمی شامل بخشهای زیر است:
نصب (Installation): نحوه اضافه کردن کامپایلر به ابزار ساخت پروژه (مثل Vite یا Next.js).
سازگاری نسخهها: پشتیبانی از نسخههای React 17, 18 و 19.
پذیرش تدریجی (Incremental Adoption): استراتژیهایی برای فعالسازی قدمبهقدم کامپایلر در پروژههای بزرگ قدیمی، بدون خراب شدن کدهای قبلی.
خطایابی (Debugging): نحوه پیدا کردن و رفع مشکلات زمانی که کدی با قوانین کامپایلر تداخل دارد.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://react.dev/learn