सबसे पहले, स्ट्रीमिंग क्या है? आप इसका इस्तेमाल क्यों करेंगे?
स्ट्रीमिंग पृष्ठों को टॉप-डाउन (बाहरी-इन) प्रस्तुत करने का वैकल्पिक तरीका है। डिफ़ॉल्ट प्रतिपादन व्यवहार अंदरूनी है। स्ट्रीमिंग अपने नियंत्रक में सक्षम होना चाहिए:
class MyController
def action
render stream: true # Streaming enabled
end
end
documentation के अनुसार:
स्ट्रीमिंग हल्के कार्यों नए या संपादित की तरह के लिए overkill माना जा सकता है। स्ट्रीमिंग का वास्तविक लाभ महंगी क्रियाओं पर है, उदाहरण के लिए, डेटाबेस पर बहुत से प्रश्न पूछें।
तो, यदि आप स्ट्रीमिंग का उपयोग नहीं कर रहे हैं, तो क्या अभी भी कोई अंतर है?
हां।
अंतर एक टेम्पलेट कई सामग्री ब्लॉक को content_for
पर कॉल करके कई बार परिभाषित कर सकता है।ऐसा करने से ब्लॉक को श्रेणीबद्ध और लेआउट है कि पारित करेंगे:
# 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>
provide
के बाद से खोज प्रदान की गई टेम्पलेट जारी रखने के लिए नहीं है, केवल पहली provide
कॉल को दिया गया ब्लॉक टेम्पलेट को भेज दिया जाएगा:
# 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>
क्या आप http://api.rubyonrails.org/classes/ActionController/Streaming.html से परिचित हैं? –
ईमानदारी से, इसका उल्लेख करने से पहले कोई नहीं। मैंने आपके द्वारा साझा किए गए रेफरी पर एक नज़र डाली, और यह उत्कृष्ट है। कभी नहीं पता था कि डिफ़ॉल्ट रूप से रेल लेआउट से पहले टेम्प्लेट लोड करते हैं! तो स्ट्रीमिंग इस आदेश को वापस करने का तरीका है। फिर..? – Bruce
यह ठीक है कि इसे कैसे कार्यान्वित किया गया है, स्ट्रीमिंग का मुख्य लाभ पृष्ठ के कुछ हिस्सों (विशेष रूप से हेडर जेएस) को पूरे पृष्ठ की प्रतीक्षा करने के बजाय ब्राउज़र पर वापस स्ट्रीम करने के लिए सक्षम करना है। –