Po pierwsze, jakie jest strumieniowanie? Dlaczego miałbyś go używać?
Strumieniowanie to alternatywna metoda renderowania stron z góry na dół (na zewnątrz). Domyślne zachowanie renderowania ma charakter wewnętrzny. Streaming musi być włączone w Twojej kontrolera:
class MyController
def action
render stream: true # Streaming enabled
end
end
Według documentation:
żywo mogą być uznane za przesadą lekkich działań jak nowe lub edytować. Prawdziwa korzyść z przesyłania strumieniowego to kosztowne działania, które na przykład wykonują wiele zapytań w bazie danych.
Tak więc, jeśli nie korzystasz z przesyłania strumieniowego, czy nadal występuje różnica?
Tak.
Różnica jest szablonem można zdefiniować wielu bloków treści dzwoniąc content_for
wiele razy.Spowoduje to złączyć bloki i przekazać, że do układu:
# 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>
Od provide
nie kontynuować poszukiwania dostarczonego szablonu, tylko blok przeszedł do pierwszego provide
zaproszenia zostaną wysłane do szablonu:
# 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>
Czy znasz http://api.rubyonrails.org/classes/ActionController/Streaming.html? –
Szczerze, nie, zanim o tym wspomnisz. Po prostu przyjrzałem się ref, który udostępniłeś i jest doskonały. Nigdy nie wiedziałem, że domyślnie szablon ładowania Railsów przed układem! Więc streaming to sposób na odwrócenie tej kolejności. Następnie..? – Bruce
Tak właśnie zostało zaimplementowane, główną zaletą przesyłania strumieniowego jest umożliwienie przesyłania części strony (w szczególności nagłówka JS) do przeglądarki, gdy jest ona gotowa, zamiast czekania na całą stronę. –