لینتکردن React Compiler حالا با سرعت Rust توی Oxlint
خلاصهٔ کاملتر
تیم React اخیراً نسخه بازنویسیشده React Compiler با Rust رو معرفی کرد و گفت این از این به بعد نسخه اصلی کامپایلره. نویسنده این پست، که یهسال هست از React Compiler روی پروژهی AI website builder خودش (Outlyne) استفاده میکنه، میگه دیگه لازم نیست دستی useCallback یا useMemo بذاره. اون همچنین کل تولچین خودشو به Vite v8 و اکوسیستم oxc منتقل کرده: Rollup به Rolldown، eslint به Oxlint، prettier به oxfmt و jest به vitest.
با این حال React Compiler تا امروز مانع سرعت کامل این تولچین بود، چون Oxlint برای لینتکردن قوانین React Compiler مجبور بود اول Babel رو اجرا کنه و بعد هستهی React Compiler رو، که لینت رو تا سه برابر کندتر میکرد.
نویسنده تأکید میکنه که اجرای همهی قوانین لینت React Compiler یه پیشنیاز جدیه، چون اگه کدی بنویسی که خارج از زیرمجموعهی پشتیبانیشدهی جاوااسکریپته، کامپایلر بیسروصدا بایلوت میکنه (یعنی از حالت بهینهسازی خودکار خارج میشه) و میتونه عملکرد UI رو خراب کنه؛ خودش هم یه بار همینجوری یه انیمیشن رو تو صفحه اصلی سایتش خراب کرد.
نسخهی جدید Oxlint (v1.79.0، منتشرشده ۱۸ اوت ۲۰۲۶) حالا ۲۲ قانون لینت React Compiler رو مستقیم با Rust اجرا میکنه، بدون اینکه اصلاً به Babel نیاز باشه. توی پروژهی نویسنده زمان لینت از حدود ۲۹.۲ ثانیه به ۹.۱ ثانیه رسیده (۳.۲ برابر سریعتر)، و وقتی یه پلاگین جانبی دیگه (perfectionist) رو هم کنار گذاشته، به ۲.۶ ثانیه رسیده، یعنی ۱۱ برابر سریعتر از حالت اول.
سمت build هنوز داستان فرق داره: پیادهسازی بومی React Compiler برای مرحلهی build هنوز آزمایشیه. بستهی oxc-transform-react نسخه ۰٫۰٫۱ (منتشرشده ۴ اوت ۲۰۲۶) حالا حدود دو برابر از پورت اولیهی Rust سریعتره، روی بیش از ۱۰۰ ریپازیتوری و ۱۰۰ هزار فایل تست شده، و مشکل source map هم حل شده تا با fast refresh هم کار کنه. نویسنده داره ازش برای ساخت یه پلاگین Vite جایگزین @rolldown/plugin-babel استفاده میکنه.
این آپدیت فقط رو لینت اثر میذاره و مستقل از تولچین build قابل استفادهست؛ مهاجرت از ESLint هم با npx @oxlint/migrate یا اسکیل migrate-oxlint راحته. یه نکتهی مهم دیگه: قانون eslint/no-param-reassign رو هم نگه دار، چون reassignکردن یه prop میتونه بیسروصدا کامپوننت رو از React Compiler خارج کنه، در حالی که قوانین فعلی Oxlint این مورد رو نمیگیرن:
function MyComponent({ value }) {
value = value ?? someStateValue;
return <button onClick={() => submit(value)}>Click me</button>;
}راهحلش اینه که بهجای reassignکردن، prop رو با یه اسم دیگه بگیری و مقدار نهایی رو تو یه متغیر جدید بسازی.
نکات کلیدی:
- Oxlint v1.79.0 (۱۸ اوت ۲۰۲۶) با ۲۲ قانون لینت React Compiler که مستقیم با Rust اجرا میشن، بدون نیاز به Babel
- زمان لینت توی یه پروژه واقعی از ۲۹.۲ ثانیه به ۹.۱ ثانیه رسید (۳.۲ برابر سریعتر)، و به ۲.۶ ثانیه (۱۱ برابر) بعد از حذف یه پلاگین جانبی دیگه
- بایلوتشدن React Compiler روی کد خارج از زیرمجموعهی پشتیبانیشده باعث از دست رفتن memoization خودکار و افت UX میشه
- oxc-transform-react نسخه ۰٫۰٫۱ (۴ اوت ۲۰۲۶) پیادهسازی بومی build-time هست، حدود ۲ برابر سریعتر از پورت اولیهی Rust
- قانون eslint/no-param-reassign رو کنار قوانین Oxlint نگه دار، چون Oxlint فعلاً reassignکردن prop رو تشخیص نمیده




