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




