SlideShare ist ein Scribd-Unternehmen logo
1 von 28
HTTP Streaming
Monster on Rails Nov. 2011
Rails 3.1 - Techniken für bessere Ladezeiten

Christian Peters
02.11.201
Zweitag // Gründungsstory
                                                                                                1
       The Big Picture

      Herkömmlicher Rendering-Prozess
      Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt.



                    Client                                                          Server




                                                                                                09.11.201
Monster on Rails // HTTP Streaming                    2
                                                                                                1
02.11.201
Zweitag // Gründungsstory
                                                                                                  1
       The Big Picture

      Herkömmlicher Rendering-Prozess
      Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt.



                    Client                                                          Server
                                                   Dokument anfragen
                                                                                    Angefragtes
                                                                                    Dokument
                                                                                    generieren




                                                                                                  09.11.201
Monster on Rails // HTTP Streaming                    2
                                                                                                  1
02.11.201
Zweitag // Gründungsstory
                                                                                                  1
       The Big Picture

      Herkömmlicher Rendering-Prozess
      Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt.



                    Client                                                          Server
                                                   Dokument anfragen
                                                                                    Angefragtes
                                                                                    Dokument
                                                Fertiges Dokument ausliefern        generieren
                Head auswerten




                                                                                                  09.11.201
Monster on Rails // HTTP Streaming                    2
                                                                                                  1
02.11.201
Zweitag // Gründungsstory
                                                                                                  1
       The Big Picture

      Herkömmlicher Rendering-Prozess
      Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt.



                    Client                                                          Server
                                                   Dokument anfragen
                                                                                    Angefragtes
                                                                                    Dokument
                                                Fertiges Dokument ausliefern        generieren
                Head auswerten                      Angefragte Assets




                                                                                                  09.11.201
Monster on Rails // HTTP Streaming                    2
                                                                                                  1
02.11.201
Zweitag // Gründungsstory
                                                                                                  1
       The Big Picture

      Herkömmlicher Rendering-Prozess
      Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt.



                    Client                                                          Server
                                                   Dokument anfragen
                                                                                    Angefragtes
                                                                                    Dokument
                                                Fertiges Dokument ausliefern        generieren
                Head auswerten                      Angefragte Assets



         DOM
        aufbauen




                                                                                                  09.11.201
Monster on Rails // HTTP Streaming                    2
                                                                                                  1
02.11.201
Zweitag // Gründungsstory
                                                                                                  1
       The Big Picture

      Herkömmlicher Rendering-Prozess
      Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt.



                    Client                                                          Server
                                                   Dokument anfragen
                                                                                    Angefragtes
                                                                                    Dokument
                                                Fertiges Dokument ausliefern        generieren
                Head auswerten                      Angefragte Assets



         DOM
        aufbauen




                                                                                                  09.11.201
Monster on Rails // HTTP Streaming                    2
                                                                                                  1
02.11.201
Zweitag // Gründungsstory
                                                                                                  1
       The Big Picture

      Herkömmlicher Rendering-Prozess
      Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt.



                    Client                                                          Server
                                                   Dokument anfragen
                                                                                    Angefragtes
                                                                                    Dokument
                                                Fertiges Dokument ausliefern        generieren
                Head auswerten                      Angefragte Assets



         DOM
        aufbauen




                                                                                                  09.11.201
Monster on Rails // HTTP Streaming                    2
                                                                                                  1
02.11.201
Zweitag // Gründungsstory
                                                                                             1
       The Big Picture

      Rendering-Prozess mit Streaming
      Assets können schon geladen werden, während der Server noch das Dokument zusammenstellt.



                    Client                                                      Server




                                                                                             09.11.201
Monster on Rails // HTTP Streaming                  3
                                                                                             1
02.11.201
Zweitag // Gründungsstory
                                                                                             1
       The Big Picture

      Rendering-Prozess mit Streaming
      Assets können schon geladen werden, während der Server noch das Dokument zusammenstellt.



                    Client                                                      Server
                                                Dokument anfragen




                                                                                             09.11.201
Monster on Rails // HTTP Streaming                  3
                                                                                             1
02.11.201
Zweitag // Gründungsstory
                                                                                             1
       The Big Picture

      Rendering-Prozess mit Streaming
      Assets können schon geladen werden, während der Server noch das Dokument zusammenstellt.



                    Client                                                      Server
                                                Dokument anfragen

                                                          Head ausliefern         Angefragtes
                Head auswerten
                                                                                  Dokument
                                                                                  generieren




                                                                                             09.11.201
Monster on Rails // HTTP Streaming                  3
                                                                                             1
02.11.201
Zweitag // Gründungsstory
                                                                                             1
       The Big Picture

      Rendering-Prozess mit Streaming
      Assets können schon geladen werden, während der Server noch das Dokument zusammenstellt.



                    Client                                                      Server
                                                Dokument anfragen

                                                          Head ausliefern         Angefragtes
                Head auswerten
                                                                                  Dokument
                                                                                  generieren
                                                Assets




                                                                                             09.11.201
Monster on Rails // HTTP Streaming                  3
                                                                                             1
02.11.201
Zweitag // Gründungsstory
                                                                                             1
       The Big Picture

      Rendering-Prozess mit Streaming
      Assets können schon geladen werden, während der Server noch das Dokument zusammenstellt.



                    Client                                                        Server
                                                Dokument anfragen

                                                               Head ausliefern     Angefragtes
                Head auswerten
                                                                                   Dokument
                                                                                   generieren
                                                Assets

                                                                          efern
                                                            kum ent ausli
                                              Fer   tiges Do
                            DOM aufbauen




                                                                                             09.11.201
Monster on Rails // HTTP Streaming                     3
                                                                                             1
02.11.201
Zweitag // Gründungsstory
                                                                                             1
       HTTP Streaming Basics

      Chunked Transfer Encoding
      Mit Transfer-Encoding: chunked können Dokumente in Teilstücken ausgeliefert werden.


      ❖   Kein Content-Length Header
          ❖   (setzt komplett generiertes                         HTTP/1.1 200 OK
                                                                  Content-Type: text/plain
              Dokument voraus)                                    Content-Length: 870




                                                                                             09.11.201
Monster on Rails // HTTP Streaming                    4
                                                                                             1
02.11.201
Zweitag // Gründungsstory
                                                                                                  1
       HTTP Streaming Basics

      Chunked Transfer Encoding
      Mit Transfer-Encoding: chunked können Dokumente in Teilstücken ausgeliefert werden.


      ❖   Kein Content-Length Header
          ❖   (setzt komplett generiertes                         HTTP/1.1 200 OK
                                                                  Content-Type: text/plain
              Dokument voraus)                                    Content-Length: 870




      ❖   Stattdessen: Transfer-Encoding: chunked
          ❖   HTTP 1.1 Feature                                    HTTP/1.1 200 OK
                                                                  Content-Type: text/plain

              Chunk Größe vor jedem Chunk
                                                                  Transfer-Encoding: chunked
          ❖
                                                                  25
          ❖   Transfer mit 0 terminiert                           This is the data in the first chunk

                                                                  1C
                                                                  and this is the second one

                                                                  19
                                                                  and this is another one

                                                                  0



                                                                                                  09.11.201
Monster on Rails // HTTP Streaming                    4
                                                                                                  1
02.11.201
Zweitag // Gründungsstory
                                         1




      Cool. Und wann schicken
      wir jetzt was für Chunks
      raus?




                                         09.11.201
Monster on Rails // HTTP Streaming   5
                                         1
02.11.201
Zweitag // Gründungsstory
                                                                      1




      Cool. Und wann schicken
      wir jetzt was für Chunks
      raus?
      ❖   Primäres Ziel:
          ❖   Der Client soll Javascript- & CSS-Assets früher laden
          ❖   Kostspielige Datenbankabfragen zurückstellen




                                                                      09.11.201
Monster on Rails // HTTP Streaming         5
                                                                      1
02.11.201
Zweitag // Gründungsstory
                                                                                  1




      Cool. Und wann schicken
      wir jetzt was für Chunks
      raus?
      ❖   Primäres Ziel:
          ❖   Der Client soll Javascript- & CSS-Assets früher laden
          ❖   Kostspielige Datenbankabfragen zurückstellen

      ❖   Also:                                                 Layout
          ❖   Flush nach <head> ... </head>             yield
                                                                   Eigentliches
          ❖   ➔ Rendern des Layouts bis zum yield?                  Template


                                                                                  09.11.201
Monster on Rails // HTTP Streaming         5
                                                                                  1
02.11.201
Zweitag // Gründungsstory
                                                                                                                  1




      Das Problem mit content_for...
      Layout und Template sind per content_for miteinander verwoben.

      <html>                                                    Layout
        <head>
          <title><%= yield :title %></title>
          <%= javascript_include_tag :defaults %>
          <%= yield :extra_javascripts %>
          <%= stylesheet_link_tag :defaults %>
          <%= yield :canonical_link %>
        </head>
        <body>
          <aside>
           <%= yield :sidebar %>
          </aside>
          <div class='content'>
           <%= yield %>
          </div>                 <% content_for :title, "#{@product.title} im Monster Online-Shop" %>
        </body>                  <% content_for :canonical_link, canonical_product_path(@product) %>
      </html>
                                <% content_for :sidebar do %>
                                  <h1>Dazu passt</h1>
                                  <ul>
                                    <%= render partial: 'cross_selling', collection: @product.cross_sellings %>
                                  </ul>
                                <% end %>

                                <h1><%= @product.title %></h1>
                                <div class='description'>
                                  ...
               Template         </div>

                                                                                                                  09.11.201
Monster on Rails // HTTP Streaming                                 6
                                                                                                                  1
02.11.201
Zweitag // Gründungsstory
                                                                     1




      Die realisierte Lösung
      Es wird wechselseitig Layout/Template gerendert und geflusht.




  Ordinary Template Rendering in Rails




                                                                     09.11.201
Monster on Rails // HTTP Streaming                    7
                                                                     1
02.11.201
Zweitag // Gründungsstory
                                                                                          1




      Die realisierte Lösung
      Es wird wechselseitig Layout/Template gerendert und geflusht.




  Ordinary Template Rendering in Rails




                                               Template Rendering with Streaming using Ruby Fibers

                                                                                          09.11.201
Monster on Rails // HTTP Streaming                    7
                                                                                          1
02.11.201
Zweitag // Gründungsstory
                                                                                          1




      Die realisierte Lösung
      Es wird wechselseitig Layout/Template gerendert und geflusht.




  Ordinary Template Rendering in Rails



http://yehudakatz.com/2010/09/07/
automatic-flushing-the-rails-3-1-plan/
http://pragdave.blogs.pragprog.com/pragdave/
2007/12/pipelines-using.html                   Template Rendering with Streaming using Ruby Fibers

                                                                                          09.11.201
Monster on Rails // HTTP Streaming                    7
                                                                                          1
02.11.201
Zweitag // Gründungsstory
                                                                 1




      Hands on!




       http://railscasts.com/episodes/266-http-streaming

       http://apidock.com/rails/ActionController/Streaming

                                                                 09.11.201
Monster on Rails // HTTP Streaming                           8
                                                                 1
02.11.201
Zweitag // Gründungsstory
                                                                                        1
       Kontext

      Caveats
      Mechanismen, die die Response nach Rendering-Start manipulieren, greifen nicht.




                                                                                        09.11.201
Monster on Rails // HTTP Streaming                     9
                                                                                        1
02.11.201
Zweitag // Gründungsstory
                                                                                        1
       Kontext

      Caveats
      Mechanismen, die die Response nach Rendering-Start manipulieren, greifen nicht.


      ❖   Fehlermeldungen & Stacktraces nur im Log




                                                                                        09.11.201
Monster on Rails // HTTP Streaming                     9
                                                                                        1
02.11.201
Zweitag // Gründungsstory
                                                                                        1
       Kontext

      Caveats
      Mechanismen, die die Response nach Rendering-Start manipulieren, greifen nicht.


      ❖   Fehlermeldungen & Stacktraces nur im Log
      ❖   Keine Manipulation von Header, Cookies, Session
          ❖   HTTP Header werden vor dem Rendering gesendet
          ❖   Bei Modifikationsversuch: ActionDispatch::ClosedError




                                                                                        09.11.201
Monster on Rails // HTTP Streaming                     9
                                                                                        1
02.11.201
Zweitag // Gründungsstory
                                                                                        1
       Kontext

      Caveats
      Mechanismen, die die Response nach Rendering-Start manipulieren, greifen nicht.


      ❖   Fehlermeldungen & Stacktraces nur im Log
      ❖   Keine Manipulation von Header, Cookies, Session
          ❖   HTTP Header werden vor dem Rendering gesendet
          ❖   Bei Modifikationsversuch: ActionDispatch::ClosedError
      ❖   Keine Middlewares, die den Body manipulieren
          ❖   Aktuell kein Rack::Cache
              ❖   Cache-Control: „no-cache“




                                                                                        09.11.201
Monster on Rails // HTTP Streaming                     9
                                                                                        1
02.11.201
Zweitag // Gründungsstory
                                                                                        1
       Kontext

      Caveats
      Mechanismen, die die Response nach Rendering-Start manipulieren, greifen nicht.


      ❖   Fehlermeldungen & Stacktraces nur im Log
      ❖   Keine Manipulation von Header, Cookies, Session
          ❖   HTTP Header werden vor dem Rendering gesendet
          ❖   Bei Modifikationsversuch: ActionDispatch::ClosedError
      ❖   Keine Middlewares, die den Body manipulieren
          ❖   Aktuell kein Rack::Cache
              ❖   Cache-Control: „no-cache“
      ❖   Kein Haml



                                                                                        09.11.201
Monster on Rails // HTTP Streaming                     9
                                                                                        1

Weitere ähnliche Inhalte

Empfohlen

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Empfohlen (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

HTTP-Streaming in Rails 3.1 - Monster on Rails Nov. 2011

  • 1. HTTP Streaming Monster on Rails Nov. 2011 Rails 3.1 - Techniken für bessere Ladezeiten Christian Peters
  • 2. 02.11.201 Zweitag // Gründungsstory 1 The Big Picture Herkömmlicher Rendering-Prozess Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt. Client Server 09.11.201 Monster on Rails // HTTP Streaming 2 1
  • 3. 02.11.201 Zweitag // Gründungsstory 1 The Big Picture Herkömmlicher Rendering-Prozess Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt. Client Server Dokument anfragen Angefragtes Dokument generieren 09.11.201 Monster on Rails // HTTP Streaming 2 1
  • 4. 02.11.201 Zweitag // Gründungsstory 1 The Big Picture Herkömmlicher Rendering-Prozess Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt. Client Server Dokument anfragen Angefragtes Dokument Fertiges Dokument ausliefern generieren Head auswerten 09.11.201 Monster on Rails // HTTP Streaming 2 1
  • 5. 02.11.201 Zweitag // Gründungsstory 1 The Big Picture Herkömmlicher Rendering-Prozess Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt. Client Server Dokument anfragen Angefragtes Dokument Fertiges Dokument ausliefern generieren Head auswerten Angefragte Assets 09.11.201 Monster on Rails // HTTP Streaming 2 1
  • 6. 02.11.201 Zweitag // Gründungsstory 1 The Big Picture Herkömmlicher Rendering-Prozess Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt. Client Server Dokument anfragen Angefragtes Dokument Fertiges Dokument ausliefern generieren Head auswerten Angefragte Assets DOM aufbauen 09.11.201 Monster on Rails // HTTP Streaming 2 1
  • 7. 02.11.201 Zweitag // Gründungsstory 1 The Big Picture Herkömmlicher Rendering-Prozess Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt. Client Server Dokument anfragen Angefragtes Dokument Fertiges Dokument ausliefern generieren Head auswerten Angefragte Assets DOM aufbauen 09.11.201 Monster on Rails // HTTP Streaming 2 1
  • 8. 02.11.201 Zweitag // Gründungsstory 1 The Big Picture Herkömmlicher Rendering-Prozess Assets können erst angefragt werden, wenn das angefragte Dokument vollständig vorliegt. Client Server Dokument anfragen Angefragtes Dokument Fertiges Dokument ausliefern generieren Head auswerten Angefragte Assets DOM aufbauen 09.11.201 Monster on Rails // HTTP Streaming 2 1
  • 9. 02.11.201 Zweitag // Gründungsstory 1 The Big Picture Rendering-Prozess mit Streaming Assets können schon geladen werden, während der Server noch das Dokument zusammenstellt. Client Server 09.11.201 Monster on Rails // HTTP Streaming 3 1
  • 10. 02.11.201 Zweitag // Gründungsstory 1 The Big Picture Rendering-Prozess mit Streaming Assets können schon geladen werden, während der Server noch das Dokument zusammenstellt. Client Server Dokument anfragen 09.11.201 Monster on Rails // HTTP Streaming 3 1
  • 11. 02.11.201 Zweitag // Gründungsstory 1 The Big Picture Rendering-Prozess mit Streaming Assets können schon geladen werden, während der Server noch das Dokument zusammenstellt. Client Server Dokument anfragen Head ausliefern Angefragtes Head auswerten Dokument generieren 09.11.201 Monster on Rails // HTTP Streaming 3 1
  • 12. 02.11.201 Zweitag // Gründungsstory 1 The Big Picture Rendering-Prozess mit Streaming Assets können schon geladen werden, während der Server noch das Dokument zusammenstellt. Client Server Dokument anfragen Head ausliefern Angefragtes Head auswerten Dokument generieren Assets 09.11.201 Monster on Rails // HTTP Streaming 3 1
  • 13. 02.11.201 Zweitag // Gründungsstory 1 The Big Picture Rendering-Prozess mit Streaming Assets können schon geladen werden, während der Server noch das Dokument zusammenstellt. Client Server Dokument anfragen Head ausliefern Angefragtes Head auswerten Dokument generieren Assets efern kum ent ausli Fer tiges Do DOM aufbauen 09.11.201 Monster on Rails // HTTP Streaming 3 1
  • 14. 02.11.201 Zweitag // Gründungsstory 1 HTTP Streaming Basics Chunked Transfer Encoding Mit Transfer-Encoding: chunked können Dokumente in Teilstücken ausgeliefert werden. ❖ Kein Content-Length Header ❖ (setzt komplett generiertes HTTP/1.1 200 OK Content-Type: text/plain Dokument voraus) Content-Length: 870 09.11.201 Monster on Rails // HTTP Streaming 4 1
  • 15. 02.11.201 Zweitag // Gründungsstory 1 HTTP Streaming Basics Chunked Transfer Encoding Mit Transfer-Encoding: chunked können Dokumente in Teilstücken ausgeliefert werden. ❖ Kein Content-Length Header ❖ (setzt komplett generiertes HTTP/1.1 200 OK Content-Type: text/plain Dokument voraus) Content-Length: 870 ❖ Stattdessen: Transfer-Encoding: chunked ❖ HTTP 1.1 Feature HTTP/1.1 200 OK Content-Type: text/plain Chunk Größe vor jedem Chunk Transfer-Encoding: chunked ❖ 25 ❖ Transfer mit 0 terminiert This is the data in the first chunk 1C and this is the second one 19 and this is another one 0 09.11.201 Monster on Rails // HTTP Streaming 4 1
  • 16. 02.11.201 Zweitag // Gründungsstory 1 Cool. Und wann schicken wir jetzt was für Chunks raus? 09.11.201 Monster on Rails // HTTP Streaming 5 1
  • 17. 02.11.201 Zweitag // Gründungsstory 1 Cool. Und wann schicken wir jetzt was für Chunks raus? ❖ Primäres Ziel: ❖ Der Client soll Javascript- & CSS-Assets früher laden ❖ Kostspielige Datenbankabfragen zurückstellen 09.11.201 Monster on Rails // HTTP Streaming 5 1
  • 18. 02.11.201 Zweitag // Gründungsstory 1 Cool. Und wann schicken wir jetzt was für Chunks raus? ❖ Primäres Ziel: ❖ Der Client soll Javascript- & CSS-Assets früher laden ❖ Kostspielige Datenbankabfragen zurückstellen ❖ Also: Layout ❖ Flush nach <head> ... </head> yield Eigentliches ❖ ➔ Rendern des Layouts bis zum yield? Template 09.11.201 Monster on Rails // HTTP Streaming 5 1
  • 19. 02.11.201 Zweitag // Gründungsstory 1 Das Problem mit content_for... Layout und Template sind per content_for miteinander verwoben. <html> Layout   <head>     <title><%= yield :title %></title>     <%= javascript_include_tag :defaults %>     <%= yield :extra_javascripts %>     <%= stylesheet_link_tag :defaults %>     <%= yield :canonical_link %>   </head>   <body> <aside>      <%= yield :sidebar %> </aside> <div class='content'>      <%= yield %> </div> <% content_for :title, "#{@product.title} im Monster Online-Shop" %>   </body> <% content_for :canonical_link, canonical_product_path(@product) %> </html> <% content_for :sidebar do %>   <h1>Dazu passt</h1>   <ul>     <%= render partial: 'cross_selling', collection: @product.cross_sellings %>   </ul> <% end %> <h1><%= @product.title %></h1> <div class='description'>   ... Template </div> 09.11.201 Monster on Rails // HTTP Streaming 6 1
  • 20. 02.11.201 Zweitag // Gründungsstory 1 Die realisierte Lösung Es wird wechselseitig Layout/Template gerendert und geflusht. Ordinary Template Rendering in Rails 09.11.201 Monster on Rails // HTTP Streaming 7 1
  • 21. 02.11.201 Zweitag // Gründungsstory 1 Die realisierte Lösung Es wird wechselseitig Layout/Template gerendert und geflusht. Ordinary Template Rendering in Rails Template Rendering with Streaming using Ruby Fibers 09.11.201 Monster on Rails // HTTP Streaming 7 1
  • 22. 02.11.201 Zweitag // Gründungsstory 1 Die realisierte Lösung Es wird wechselseitig Layout/Template gerendert und geflusht. Ordinary Template Rendering in Rails http://yehudakatz.com/2010/09/07/ automatic-flushing-the-rails-3-1-plan/ http://pragdave.blogs.pragprog.com/pragdave/ 2007/12/pipelines-using.html Template Rendering with Streaming using Ruby Fibers 09.11.201 Monster on Rails // HTTP Streaming 7 1
  • 23. 02.11.201 Zweitag // Gründungsstory 1 Hands on! http://railscasts.com/episodes/266-http-streaming http://apidock.com/rails/ActionController/Streaming 09.11.201 Monster on Rails // HTTP Streaming 8 1
  • 24. 02.11.201 Zweitag // Gründungsstory 1 Kontext Caveats Mechanismen, die die Response nach Rendering-Start manipulieren, greifen nicht. 09.11.201 Monster on Rails // HTTP Streaming 9 1
  • 25. 02.11.201 Zweitag // Gründungsstory 1 Kontext Caveats Mechanismen, die die Response nach Rendering-Start manipulieren, greifen nicht. ❖ Fehlermeldungen & Stacktraces nur im Log 09.11.201 Monster on Rails // HTTP Streaming 9 1
  • 26. 02.11.201 Zweitag // Gründungsstory 1 Kontext Caveats Mechanismen, die die Response nach Rendering-Start manipulieren, greifen nicht. ❖ Fehlermeldungen & Stacktraces nur im Log ❖ Keine Manipulation von Header, Cookies, Session ❖ HTTP Header werden vor dem Rendering gesendet ❖ Bei Modifikationsversuch: ActionDispatch::ClosedError 09.11.201 Monster on Rails // HTTP Streaming 9 1
  • 27. 02.11.201 Zweitag // Gründungsstory 1 Kontext Caveats Mechanismen, die die Response nach Rendering-Start manipulieren, greifen nicht. ❖ Fehlermeldungen & Stacktraces nur im Log ❖ Keine Manipulation von Header, Cookies, Session ❖ HTTP Header werden vor dem Rendering gesendet ❖ Bei Modifikationsversuch: ActionDispatch::ClosedError ❖ Keine Middlewares, die den Body manipulieren ❖ Aktuell kein Rack::Cache ❖ Cache-Control: „no-cache“ 09.11.201 Monster on Rails // HTTP Streaming 9 1
  • 28. 02.11.201 Zweitag // Gründungsstory 1 Kontext Caveats Mechanismen, die die Response nach Rendering-Start manipulieren, greifen nicht. ❖ Fehlermeldungen & Stacktraces nur im Log ❖ Keine Manipulation von Header, Cookies, Session ❖ HTTP Header werden vor dem Rendering gesendet ❖ Bei Modifikationsversuch: ActionDispatch::ClosedError ❖ Keine Middlewares, die den Body manipulieren ❖ Aktuell kein Rack::Cache ❖ Cache-Control: „no-cache“ ❖ Kein Haml 09.11.201 Monster on Rails // HTTP Streaming 9 1

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n