دنیای توسعه وب در چند سال گذشته حسابی پیچیده شده. تا همین چند وقت پیش، برای اینکه یه اپلیکیشن سریع و روان (شبیه به اپلیکیشن‌های تک‌صفحه‌ای یا همون SPA) بسازیم، احساس میکردیم حتماً باید بریم سراغ غول‌ هایی مثل React، Vue یا Angular.

نتیجه چی میشد؟ باید دو تا اپلیکیشن جداگانه رو مدیریت میکردیم (یکی بک‌اند، یکی فرانت‌اند)، برای هر کار کوچیکی API مینوشتیم، دائم بین کدهای روبی و جاوا اسکریپت سوییچ میکردیم و درگیر مدیریت State در فرانت‌اند میشدیم. خلاصه که کلی دردسر برای امکاناتی که شاید میشد خیلی ساده‌تر پیاده‌شون کرد!

اما خب، توسعه‌دهندگان Rails همیشه به دنبال "خوشحالی برنامه ‌نویس" و سادگی هستن. اینجاست که Hotwire و قلب تپنده‌اش یعنی Turboوارد میدون میشن تا بازی رو عوض کنن.

اصلاً Hotwire یعنی چی؟

کلمه Hotwire مخفف HTML Over The Wire است. ایده اصلی اینه: به جای اینکه از سرور (بک‌اند) داده‌ های خام مثل JSON بفرستیم و بعد تو مرورگر با جاوا اسکریپت کلی زور بزنیم تا این داده ‌ها رو تبدیل به رابط کاربری (UI) کنیم، چرا مستقیماً خود کدهای HTML آماده رو از سرور نفرستیم؟!

سرور شما (Rails) تو رندر کردن HTML خیلی سریعه. با Hotwire، ما همون HTML رو از طریق شبکه میفرستیم و فقط بخش‌ هایی از صفحه که تغییر کردن رو جایگزین میکنیم. نتیجه؟ سرعت یک SPA رو داریم اما با سادگی اپلیکیشن ‌های کلاسیک رندر شده در سرور (SSR).

آشنایی با خانواده دوست‌داشتنی Turbo

برای اینکه این جادوی Hotwire کار کنه، ما ابزاری به اسم Turbo رو داریم که خودش به سه بخش اصلی تقسیم میشه:

۱. Turbo Drive (همون Turbolinks قدیمی اما بدنساز!)

وقتی روی یه لینک کلیک میکنید یا یه فرم رو سابمیت میکنید، Turbo Drive جلوی رفرش شدن کل صفحه رو میگیره. به جاش، تو پس‌زمینه صفحه جدید رو از سرور میگیره و فقط قسمت <body> (و تگ‌های مهم <head>) رو با صفحه فعلی جایگزین میکنه.

  • نتیجه: بدون نوشتن حتی یک خط کد جاوا اسکریپت، اپلیکیشن شما به شدت سریع‌تر به نظر میرسه، چون نیازی به لود مجدد CSS ها و JS ها نیست.

۲. Turbo Frames (قطعات مستقل صفحه)

فرض کنید تو یه صفحه، یه لیست از مقالات دارید و میخواید یکیشون رو همونجا ویرایش کنید. با Turbo Frames، میتونید یه بخش از صفحه رو تو یک "فریم" قرار بدید. حالا هر تعاملی (مثل کلیک روی لینک ویرایش یا سابمیت فرم) داخل این فریم اتفاق بیفته، فقط و فقط همون کادر آپدیت میشه و بقیه صفحه دست‌نخورده باقی میمونه. مثل iframe های قدیمی، اما مدرن، سریع و یکپارچه با بقیه صفحه!

۳. Turbo Streams (جادوی Real-time)

اینجا همون جاییه که کفتون میبره! فرض کنید دارید یه اپلیکیشن چت میسازید. با Turbo Streams و ترکیبش با ActionCable (وب‌سوکت ‌های Rails)، میتونید تغییرات دیتابیس رو به صورت زنده و در لحظه به مرورگر کاربر بفرستید. سرور یه تیکه HTML کوچیک (مثلاً پیام جدید چت) رو میفرسته و Turbo Stream اون رو به لیست پیام‌های کاربر اضافه می‌کنه (Append)، حذف میکنه یا آپدیت میکنه. همه اینا با کمترین کدنویسی و بدون نیاز به کتابخونه های سنگین مدیریت State.

پس جاوا اسکریپت چی می‌شه؟ (سلام Stimulus!)

خب، بالاخره یه جاهایی به جاوا اسکریپت نیاز داریم؛ مثلاً باز و بسته کردن یه منوی دراپ ‌داون، کپی کردن یه متن تو کلیپ‌ بورد، یا نشون دادن یه Modal. برای این کارهای کوچیک، Hotwire یه فریمورک مینیمال و جذاب به اسم Stimulus داره.

Stimulus قرار نیست جای Rails رو بگیره یا کل صفحه رو رندر کنه. فقط میاد به المان‌های HTML شما میچسبه و بهشون رفتار (Behavior) اضافه میکنه. شعارشون هم اینه: "فریمورک جاوا اسکریپتی برای HTML ای که از قبل دارید."

چرا باید React و Vue رو کنار بذاریم و بریم سراغ Hotwire؟

  • سرعت توسعه به شدت بالا میره: دیگه نیازی به ساختن API های REST یا GraphQL فقط برای مصرف فرانت اند خودتون ندارید.

  • یکپارچگی و تمرکز: تمام منطق تجاری (Business Logic) و اعتبارسنجی ‌ها (Validations) فقط تو سرور باقی میمونن. دیگه نیازی نیست یه بار تو بک‌اند و یه بار تو فرانت‌اند بنویسیدشون.

  • سبک بودن صفحه: مرورگر کاربر مجبور نیست مگابایت ‌ها فایل باندل شده جاوا اسکریپت رو دانلود و پردازش کنه. سایت شما روی گوشی‌ های ضعیف تر هم مثل جت کار میکنه.

  • عشق به روبی: بیشتر وقتتون رو تو دنیای زیبای روبی میگذرونید و فقط به عنوان "چاشنی" از جاوا اسکریپت استفاده میکنید.

جمع بندی

نمیگم React یا Vue ابزار های بدی هستن؛ اونا برای ساخت داشبوردهای به شدت پیچیده با تعاملات خیلی سنگین، فوق ‌العاده‌ان. اما برای ۸۰ درصد اپلیکیشن ‌های وبی که روزمره میسازیم (فروشگاه‌ ها، بلاگ ‌ها، سیستم های مدیریت محتوا، شبکه ‌های اجتماعی ساده)، استفاده از اون‌ها مثل استفاده از یه موشک برای رفتن به سوپر مارکت سر کوچه است!

با Hotwire و Turbo توی Ruby on Rails، میتونید اپلیکیشن‌ هایی بسازید که حس و حال مدرن و نرم یک SPA رو دارن، اما با همون سرعت، لذت و سادگی که همیشه از Rails انتظار داشتیم. اگر تا حالا امتحانش نکردید، پیشنهاد میکنم تو پروژه بعدی حتماً یه فرصت بهش بدید؛ احتمالاً شگفت‌زده میشید!