Parcel 3 آلفا: بازنویسی کامل با Rust
خلاصهٔ کاملتر
تیم Parcel اولین آلفای نسخهٔ ۳ رو منتشر کرده؛ یه بازنویسی کامل با Rust. تو نسخهٔ ۲ فقط تیکههایی مثل کامپایلر JavaScript (روی SWC) و Lightning CSS با Rust نوشته شده بودن و هستهٔ اصلی هنوز JavaScript بود. به گفتهٔ تیم، همین هسته جلوی سرعت رو میگرفت: حافظهٔ مشترک بین threadها نبود، garbage collection هزینه داشت و مدام باید دادهها بین workerها serialize میشد. حالا همهچیز از CLI و dev server تا bundler یه باینری native هست و بیلدها تا ۱۰۰ برابر سریعتر شدن.
یه تغییر جالب، کنار گذاشتن کش دیسکیه. نویسندهها میگن کش وقتی به درد میخوره که کد زیرش کُند باشه. وقتی بیلد سرد (یعنی بیلد از صفر بدون هیچ کشی) خودش سریعه، دنبال کردن همهٔ فایلها و تنظیماتی که کش رو باطل میکنن فقط سربار و باگ میسازه. Parcel 3 هنوز rebuild تدریجی توی حافظه داره، ولی برای تغییر پلاگین یا کانفیگ کلاً از اول بیلد میکنه. یعنی دیگه با باگهای «کش کهنه» درگیر نمیشی.
خیلی از چیزها هم حالا از اول داخل باینری هستن: HTML، CSS، TypeScript، SVG، بهینهسازی تصویر، و تازهواردهایی مثل Tailwind (بدون PostCSS)، React Compiler، MDX و glob import. دستور جدید parcel run یه فایل Node رو با HMR اجرا میکنه که برای React Server Components بهدردبخوره. با همهٔ اینا، باینری زیر ۳۰ مگابایته و هیچ وابستگی npm نداره؛ Parcel 2 با وابستگیهاش حدود ۱۲۰ مگ بود.
برای گسترش دادنش، میشه پلاگین native نوشت؛ یعنی کتابخونههای داینامیکی که موقع اجرا داخل پروسهٔ Parcel لود میشن و از طریق یه C ABI پایدار با محتوای فایلها و گراف باندل کار میکنن. برای Rust، Go و Swift هم SDK آماده هست. پلاگین JavaScript هم هنوز پشتیبانی میشه، ولی روی یه runtime داخلی مبتنی بر QuickJS اجرا میشه که زود بالا میاد و حافظهٔ کمی میخوره، ولی به سرعت V8 نمیرسه و دسترسی شبکه هم نداره.
تنظیمات همهٔ پلاگینها هم حالا توی .parcelrc جمع شده، بهجای پخش بودن توی .babelrc و .postcssrc و package.json. این کار هم پیدا کردنشون رو راحتتر میکنه هم بیلد رو سریعتر، چون کانفیگ فقط یه بار اول بیلد خونده میشه:
{
"extends": "@parcel/config-default",
"bundler": {
"plugin": "@parcel/bundler-default",
"config": { "minBundleSize": 30000 }
}
}الگوریتم باندلینگ هم بهتر شده و روی یه سایت ۴۵۰ صفحهای ۶۴٪ درخواست HTTP کمتر و ۱۰٪ حجم انتقالی کمتر داشته. tree shaking حالا برای SVG هم کار میکنه و scope hoisting حذف شده. توی حالت کتابخونه هم Parcel خودش فیلد exports رو از package.json میخونه و خروجی ESM و CJS میده. برای امتحان، parcel@next رو نصب کن یا @parcel/parcel3 رو کنار نسخهٔ ۲ بذار.
نکات کلیدی:
- Parcel 3 یه باینری Rust بدون وابستگی به Node هست و تا ۱۰۰ برابر سریعتر از v2 بیلد میکنه
- حجم باینری زیر ۳۰ مگابایته، در برابر حدود ۱۲۰ مگ برای Parcel 2 با وابستگیها
- پلاگین native با Rust، Go، Swift یا هر زبانی که C ABI رو ساپورت کنه
- پلاگینهای JavaScript روی runtime مبتنی بر QuickJS و بدون دسترسی شبکه اجرا میشن
- باندلینگ جدید: ۶۴٪ درخواست HTTP کمتر و ۱۰٪ حجم کمتر روی سایت ۴۵۰ صفحهای
- تولید .d.ts، پلاگین compressor و API برنامهنویسی JavaScript هنوز آماده نیستن




