برنامه نویسی

درایو توربو ، فریم ، جریان ، مورف؟ از چه چیزی استفاده کنیم؟!

این مقاله در ابتدا در Rails Designer منتشر شد


Trifecta Hotwire به شما امکان می دهد برنامه های وب مدرن (ریل) را بنویسید ، بدون نیاز به نوشتن (زیاد) جاوا اسکریپت دست و پا گیر با درایو ، قاب ، جریان یا مورف. اما با تمام این گزینه ها ، از کدام یک استفاده می شود و چه زمانی؟

Hotwire ، مانند ریل ، به عنوان توسعه دهنده نیاز به تغییر ذهنی از شما دارد. شما می توانید سعی کنید از محرک به صورت هر جزء استفاده کنید ، اما اگر به جای آن کنترل کننده های عمومی را می نویسید ، بیشتر از آن استفاده می کنید. در مورد گزینه های مختلف توربو نیز همین کار را می کند.

اگر از Enhancement Progressive Enhancement پیروی کنید ، یک استراتژی طراحی وب که در سال 2008 توسط آرون گوستافسون محبوبیت پیدا کرده است ، بیشترین ارزش را از HotWire دریافت می کنید که در حالی که ویژگی های پیشرفته ای را برای مرورگرهای مدرن می گذارد ، عملکرد اساسی را برای همه کاربران تضمین می کند. در حالی که امروزه این استراتژی با توجه به پشتیبانی گسترده مرورگر مدرن برای CSS و ویژگی های JavaScript بسیار مهم است ، اما برای کمک به شما در انتخاب ابزار مناسب برای کار بسیار ارزشمند است.

من به ترتیب زیر به هر گزینه می رسم:

  1. درایو توربو
  2. قاب
  3. جریان توربو (از جمله پخش)
  4. مورف توربو

این ممکن است آشکار به نظر برسد ، با این کار. اما این به شما کمک نمی کند همیشه به جریان های توربو دسترسی پیدا کنید یا گزینه های مختلفی را که درایوهای توربو دارند ، کاملاً فراموش کنید.

من یک برنامه اصلی ریل را با چند تعهد برای هر مرحله که در اینجا بیان شده بود ، گنجانده ام. من پیشنهاد می کنم آن را بررسی کنید تا درک کنید که هر نکته بهتر شده است. اولین تعهد نقطه شروع است و از ریل های پیش فرض redirect_to استفاده می کند (به root_path در این مثال). از آن برای کدگذاری همراه با این مقاله استفاده کنید. ✌ تعهد دوم نتیجه نهایی این مقاله است.

درایو توربو

متوجه خواهید شد که همه کار خوب است! برچسب دکمه به روز می شود و تعداد آنها در H1 نیز وجود دارد. البته هیچ چیز خاص ، این در اینجا فقط یک صفحه کلی است (هرچند سریعتر به دلیل درایو توربو ، بنابراین فقط بدن تزریق می شود!).

اما آنچه شما متوجه می شوید (از طریق پیمایش اجباری که اضافه کردم) ، که صفحه “پیمایش” به بالا باز می گردد. اوه خوشبختانه برای ما ، یک ابزار کوچک وجود دارد که می توانید از آنها استفاده کنید: بشر با این کار ، پیمایش را در هنگام تازه کردن صفحه حفظ می کند. باحال

در برنامه/بازدیدها/طرح بندی/برنامه. html.erb موارد زیر را اضافه کنید:



  
    <%%= content_for(:title) || "Turbo When" %>
    
    
    
+   
    <%%= csrf_meta_tags %>
    <%%= csp_meta_tag %>

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این همه بسیار جالب است ، اما فقط برای پیمایش روی بدن کار می کند. بیایید پیمایش به عنصر اصلی را مجبور کنیم:

- 
+
-
+
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

و اکنون وضعیت پیمایش دیگر همچنان ادامه ندارد.

قاب های توربو

این لحظه ای است که فریم های توربو مفید هستند. بیایید لایک های-مهمانی را در یک عنصر قاب توربو بپیچیم. و ببینید چه اتفاقی می افتد.

- 

+ <%% if user.likes.exists?(post: post) %> <%%= button_to post_like_path(post, user.likes.find_by(post: post)), method: :delete do %> Unlike <%% end %> <%% else %> <%%= button_to post_likes_path(post), method: :post do %> Like <%% end %> <%% end %> -

+
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

عالی ، دکمه Likes بر اساس بیانیه IF/Else تغییر می کند و موقعیت پیمایش هنوز حفظ می شود!

اما صبر کنید … تعداد در element doesn’t change!

Turbo Stream (including Broadcasts)

Now you reach for Turbo Streams! These are for smaller, (multiple) UI updates in different parts of the page.

Update the show action to extract the title into its own partial. While this is a fair bit of overhead for this simple example, it shows the conventional way to do it.

- + <%%= render partial: "title", locals: { post: @post } %>

<%%= @post.content %>

<%%= render partial: "likes/like", locals: { user: Current.user, post: @post } %>
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سپس جزئی:

+ 
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سپس اقدامات جریان توربو. در برنامه/نمایش/لایک/ایجاد. turbo_stream.erb:

+ <%%= turbo_stream.replace "likes" do %>
+  <%%= render partial: "likes/like", locals: { user: Current.user, post: @post } %>
+ <%% end %>

+ <%%= turbo_stream.replace "title" do %>
+  <%%= render partial: "posts/title", locals: { post: @post } %>
+ <%% end %>
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

وت برنامه/نمایش/لایک/Deور.Turbo_stream.erb:

+ <%%= turbo_stream.replace "likes" do %>
+  <%%= render partial: "likes/like", locals: { user: Current.user, post: @post } %>
+ <%% end %>

+ <%%= turbo_stream.replace "title" do %>
+  <%%= render partial: "posts/title", locals: { post: @post } %>
+ <%% end %>
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بله ، آنها یکسان هستند! احتمالاً می توانید منطق را تغییر داده و از عمل به روزرسانی برای گرفتن هر دو استفاده کنید ، اما من ترجیح می دهم که اقدامات من آرامش بخش و نیاز به جاده بین آنچه باید بین اقدامات اتفاق بیفتد تغییر کند. بنابراین من ترجیح می دهم چند نسخه تکراری داشته باشم و کد خود را به هوشمند تبدیل کنم.

یک قدم دیگر برای برداشتن وجود دارد و آن حذف آن است redirect_to در هر دو عمل کنترلر:

class LikesController < ApplicationController
  before_action :set_post, only: %w[create destroy]

  def create
    Current.user.likes.create(post: @post)
-
-   redirect_to root_path
  end

  def destroy
    Current.user.likes.find_by(post: @post).destroy
-
-   redirect_to root_path
  end

  private

  def set_post
    @post = Post.find(params[:post_id])
  end
end
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

و با این کار همه عملکردهای یکسانی داریم.

مورف توربو

بنابراین در مورد مورف توربو چطور؟ در حالی که تجربه من با آن محدود است ، محدود است ، زیرا من نمی توانم به راحتی یا بدون عوارض جانبی غیر منتظره کار کنم. حتی با برنامه مثال کوچک ، هنگام پیروی از اسناد کار نمی کند. این تعهد را برای این مجموعه مشاهده کنید. من فرضیه آن را دوست دارم ، اما در حال حاضر احساس می کنم خیلی “جادویی” (با نام مستعار من نمی دانم چه اتفاقی می افتد).

اگر بینش یا نمونه های دنیای واقعی دارید ، احساس راحتی کنید. خوشحالم که از شما می شنوم ، و احتمالاً در اینجا ارسال می کنم.

رشدی

این ، به عنوان مثال تا حدودی متناقض ، باید در هنگام استفاده از ویژگی روشن شود. به طور خلاصه:

  • پیش فرض به Turbo Drive ، با هر یک از گزینه های اضافی آن.
  • تغییر در همان عنصر: فریم های توربو
  • تغییرات مورد نیاز در جای دیگر در صفحه (یک یا بسیاری از عناصر): جریان توربو
  • تغییرات مورد نیاز خارج از چرخه درخواست فعلی (یعنی از طریق یک اقدام کنترلر): پخش توربو جریان پخش می شود

مثالی دارید که از آن مطمئن نیستید؟ به این نتیجه برسید ، من خوشحالم که به شما کمک می کنم تصمیم درستی بگیرید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا