Trước hết, truyền phát là gì? Tại sao bạn sử dụng nó?
Phát trực tuyến là phương pháp hiển thị thay thế các trang từ trên xuống (bên ngoài). Hành vi hiển thị mặc định là từ trong ra ngoài. Streaming phải được kích hoạt trong điều khiển của bạn:
class MyController
def action
render stream: true # Streaming enabled
end
end
Theo documentation:
trực tuyến có thể được coi là quá mức cần thiết cho những hành động nhẹ như mới hoặc chỉnh sửa. Lợi ích thực sự của việc truyền trực tuyến là các hành động tốn kém , ví dụ, thực hiện rất nhiều truy vấn trên cơ sở dữ liệu.
Vì vậy, nếu bạn không sử dụng phát trực tuyến, vẫn còn có sự khác biệt?
Có.
Sự khác biệt là mẫu có thể xác định nhiều khối nội dung bằng cách gọi content_for
nhiều lần.Làm như vậy sẽ nối các khối và thông qua đó để bố trí:
# layout.html.erb
<div class="heading"><%= yield :surprise %></div>
<div class="body">
<p><%= yield %></p>
<p>But it's not very interesting...</p>
</div>
# template.html.erb
<%= content_for :surprise, "Hello" %>
I've got your content!
<%= content_for :surprise, ", World!" %>
# Generated HTML
<div class="heading">Hello, World!</div>
<div class="body">
<p>I've got your content!</p>
<p>But it's not very interesting...</p>
</div>
Kể từ provide
không tiếp tục tìm kiếm các mẫu được cung cấp, chỉ có khối truyền cho provide
cuộc gọi đầu tiên sẽ được gửi đến các mẫu:
# layout.html.erb
<div class="heading"><%= yield :title %></div>
# template.html.erb
<%= provide :title, "Foo" %>
<%= provide :title, "bar" %>
# Generated HTML
<div class="heading">Foo</div>
Bạn có quen thuộc với http://api.rubyonrails.org/classes/ActionController/Streaming.html không? –
Thành thật mà nói, không có trước khi bạn đề cập đến nó. Tôi chỉ nhìn vào ref bạn chia sẻ, và nó là tuyệt vời. Không bao giờ biết rằng theo mặc định Rails tải mẫu trước khi bố trí! Vì vậy, phát trực tuyến là cách để hoàn nguyên đơn đặt hàng này. Sau đó..? – Bruce
Đó chỉ là cách nó được triển khai, lợi thế chính của phát trực tuyến là cho phép các phần của trang (đặc biệt là tiêu đề JS) được phát lại cho trình duyệt khi nó sẵn sàng, thay vì chờ toàn bộ trang. –