OJ: موتور Rustی لاوبل که جای Vite رو تو پیشنمایشها گرفته
خلاصهٔ کاملتر
لاوبل، پلتفرمی که کاربراش باهاش اپ میسازن، هر پیشنمایش زنده رو با یه سرور توسعهی واقعی و hot reload اجرا میکنه؛ یعنی وقتی فایلی عوض میشه، بدون رفرش کامل صفحه نسخهی جدید رو میفرسته. موتور این کار تا الان Vite بوده، ابزار استاندارد فرانتاند. مشکل Vite ایراد فنی نداره، فقط برای یه دولوپر روی یه لپتاپ ساخته شده؛ لاوبل روزی حدود یک میلیون سندباکس اجرا میکنه و هر سندباکس یه رانتایم جاوااسکریپت و حافظهی زیاد میخواد، یعنی هم استارت کند میشه هم نگهداشتن سندباکسهای گرم سنگین.
برای همین لاوبل یه ابزار جدید به اسم OJ (مخفف داخلی Orange Juice) ساخته: یه باینری تکفایلی نوشتهشده با Rust که همون کار Vite رو انجام میده. OJ فایل تنظیمات vite.config.ts خودت رو همونجوری که هست میخونه، پلاگینهای واقعی Vite رو از یه لایهی سازگاری رد میکنه و چیزهایی مثل React Fast Refresh (یعنی قابلیتی که بدون از دست دادن state کامپوننت، کد جدید رو جایگزین میکنه) رو خودش از نو با Rust پیاده کرده.
پایهی OJ روی Rolldown و Oxc ئه؛ همون ابزارهای Rustی که خود Vite هم بیشتر بهشون رو میاره، با این فرق که Vite هنوز یه اپ Node.js ئه که یه باندلر Rust رو صدا میزنه، ولی OJ سرتاسر Rust ئه و فقط وقتی نیاز واقعی به جاوااسکریپت باشه یه Node کوچیک روشن میکنه. طراحیش رو سه اصل هدایت کرده: بدون تغییر روی اپ فعلی کار کنه، هیچ رانتایمی تو پروژه نصب نکنه، و برای ویرایشهای burst یه agent بهینه باشه؛ وقتی agent ده فایل رو پشتسرهم عوض میکنه، OJ همه رو تو یه آپدیت یکپارچه جمع میکنه.
روی یه پروژهی تستی با دههزار کامپوننت، OJ در ۱.۲ ثانیه بالا میاد در مقابل ۴.۹ ثانیهی Vite، با ۱۱۵ مگابایت حافظه در مقابل بیش از ۱.۵ گیگابایت. رو دو پروژهی متنباز واقعی هم همین الگو تکرار شده: Excalidraw با OJ در ۰.۸ بهجای ۲.۳ ثانیه، و Twenty (یه CRM حدود ۱۵ هزار ماژول) در ۱۰.۲ بهجای ۱۱.۳ ثانیه بالا اومدن، با حافظهای بین یکسوم تا یکهشتم Vite. یه نکته برای انصاف: عدد Vite شامل vite-plugin-checker هم میشه که tsc رو پسزمینه اجرا میکنه، OJ این پلاگین رو نداره.
تو محیط واقعی هم لاوبل یه آزمایش کنترلشده رو پیشنمایشهای زندهش اجرا کرده: زمان کل رسیدن به یه اپ قابلاستفاده از ۱۷.۴ به ۸ ثانیه (میانه) رسیده، آمادهشدن سندباکس تقریبا ۵ برابر سریعتر شده (از ۱۴.۵ به ۳ ثانیه)، و حتی تو بدترین حالتها سرور توسعه از ۱۵.۸ به ۹.۶ ثانیه بهتر شده. dev server هم حدود ۶.۵ برابر کمتر حافظه مصرف میکنه. لاوبل داره OJ رو تدریجی فعال میکنه و کدش زیر گیتهاب لاوبل (lovablelabs/oj) متنباز شده.
نکات کلیدی:
- OJ یه باینری تکفایلی Rustی بهجای Vite برای پیشنمایشهای لاوبل
- روی پروژهی ۱۰هزار کامپوننتی: کلد استارت ۱.۲ ثانیه در مقابل ۴.۹ ثانیهی Vite
- مصرف حافظه یکسوم تا یکهشتم Vite، مثلا ۱۱۵ مگابایت در مقابل بیش از ۱.۵ گیگابایت
- تو تولید، زمان کل بارگذاری پیشنمایش از ۱۷.۴ به ۸ ثانیه (میانه) رسیده
- ساختهشده روی Rolldown و Oxc، با پشتیبانی از پلاگینهای واقعی Vite از طریق یه لایهی سازگاری
- کد OJ الان زیر github.com/lovablelabs/oj متنباز شده




