SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
Einf¨hrung
    u                      Compiler                     Clientmodul    R´sum´
                                                                        e   e




                                  Bachelorarbeit
             Entwicklung eines clientseitigen Webtemplatesystems mit
                            generischer Datenanalyse


                                      Tobias Nentwig


                                      18. Januar 2011




                                                                         1 / 38
Einf¨hrung
    u                  Compiler   Clientmodul   R´sum´
                                                 e   e




Inhaltsverzeichnis



       1 Einf¨hrung
             u


       2 Compiler


       3 Clientmodul


       4 R´sum´
          e   e




                                                  2 / 38
Einf¨hrung
    u                       Compiler           Clientmodul         R´sum´
                                                                    e   e




Webtemplates

      Templates sind Vorlagen f¨r Dokumente
                               u
             speichern visuelle Logik
             betten Daten & Logik in HTML-Struktur ein
             generieren HTML-Code f¨r die Darstellung im Browser
                                   u




                                                                     3 / 38
Einf¨hrung
    u                     Compiler         Clientmodul        R´sum´
                                                               e   e




Serverseitiges Templatesystem




 Ablauf                              Eigenschaften

         Server bekommt Request       + zentrale Berechnung
         Daten werden aufbereitet     + leicht skalierbar
         Template wird gerendered      – hohe Serverlast
         HTML-Code als Antwort
                                                                4 / 38
Einf¨hrung
    u                      Compiler              Clientmodul               R´sum´
                                                                            e   e




Clientseitiges Templatesystem




      Ablauf

             Daten und Templatedaten werden beim Server abgefragt
             Sind beide Anfragen erfolgreich, wird das Template geparsed
             Der daraus resultierende DOM-Baum wird in vorhandene
             Strukturen eingebettet
                                                                             5 / 38
Einf¨hrung
    u                      Compiler               Clientmodul           R´sum´
                                                                         e   e




Warum clientseitige Templatesysteme?



      Ziele meines Templatesystems . . .

             Beschleunigung von Benutzerinteraktionen
                 durch Entkoppelung der Struktur von den Daten k¨nnen
                                                                o
                 Templates clientseitig gecached werden
                 automatisierte Nutzung von modernen HTML5
                 Browserfunktionen
             Server endlasten




                                                                          6 / 38
Einf¨hrung
    u                        Compiler              Clientmodul            R´sum´
                                                                           e   e




Warum Datenanalyse im Templatesystem?


                Datenanalyse zur Adressierung der Templatekonstrukte

      Adressierung der Templatekonstrukte wird genutzt um . . .

               Template rendern, ohne dass alle Daten vorhanden sind
               Inhalte k¨nnen live aktualisiert werden
                         o
               ¨
               Anderungen k¨nnen automatisch durch Animationen
                              o
               visualisiert werden

             – erh¨hter Speicherbedarf durch Adressierungsinformationen
                  o



                                                                            7 / 38
Einf¨hrung
    u                         Compiler              Clientmodul       R´sum´
                                                                       e   e




Warum Templates compilieren?


      Ziele meines Compilers . . .

         + Datenanalyse zu aufw¨ndig f¨r Liveinterpreter
                               a      u
         + nur datenabh¨ngige Berechnungen beim Rendern durchf¨hren
                       a                                      u
         + Performancegewinn durch optimierte Templatestruktur
         + Unterst¨tzung f¨r Clients mit schwacher Rechenleistung
                  u       u
           (Smartphones)

             – reultierende Templates unleserlich und manipuliert




                                                                        8 / 38
Einf¨hrung
    u                  Compiler   Clientmodul   R´sum´
                                                 e   e




Inhaltsverzeichnis



       1 Einf¨hrung
             u


       2 Compiler


       3 Clientmodul


       4 R´sum´
          e   e




                                                  9 / 38
Einf¨hrung
    u            Compiler           Clientmodul   R´sum´
                                                   e   e




Ablaufkonzept des Templatesystems




                                                   10 / 38
Einf¨hrung
    u                      Compiler               Clientmodul              R´sum´
                                                                            e   e




Konstrukte des original Templates

      Templatesprache

             basiert syntaktisch auf der Django Template Language
             grundlegende Funktionen sind implementiert


      Implementierte Konstrukte

             Variablen
                 {{foo.bar}} durch doppelt geschweiften Klammern werden
                 Variablen in Javascript Object Notation aufgerufen
             Funktionsbl¨cke
                        o
                 {% if %}{% else %}{% end %} logischer Block der nur bei
                 erf¨llter Bedingung generiert wird
                    u


                                                                            11 / 38
Einf¨hrung
    u                        Compiler                Clientmodul                  R´sum´
                                                                                   e   e




Konstrukte des original Templates

      Weitere implementierte Konstrukte

             Funktionsbl¨cke
                        o
                  {%   for var in list %}{% end %} iteration uber Liste
                                                             ¨
                  {%   include template %} das Template wird eingebunden
                  {%   extends template %} erweitert ubergebenes Template
                                                      ¨
                  {%   block %}{% end %} bindet Inhalt in Muttertemplate ein


      Fehlende Funktionen

             Filter f¨r Variablen z.B. HTML-Escape oder Datumsfilter
                     u
             spezielle logische Bl¨cke f¨r For-Loops z.B. odd, even, first . . .
                                  o     u


                                                                                   12 / 38
Einf¨hrung
    u            Compiler           Clientmodul   R´sum´
                                                   e   e




Ablaufkonzept des Templatesystems




                                                   13 / 38
Einf¨hrung
    u                      Compiler             Clientmodul         R´sum´
                                                                     e   e




Aufbau des Compilers


      Funktion des Compilers

             generiert strukturiertes Template im JSON-Format
             manipuliert Quellcode um Adressierung zu erm¨glichen
                                                         o


      Drei Schritte zum JSON-Template




                                                                     14 / 38
Einf¨hrung
    u                       Compiler                Clientmodul        R´sum´
                                                                        e   e




Parser


             blockweise Aufspaltung durch regul¨re Ausdr¨cke
                                               a        u
             f¨gt Bl¨cke in spezielle, doppelt verketteten Skipliste
              u     o




                                                                        15 / 38
Einf¨hrung
    u                                    Compiler                              Clientmodul   R´sum´
                                                                                              e   e




Adressierer


      Aufgaben des Adressierers

                 Lokationsanalyse der Templatekonstrukte
                 Manipulation durch Adressinjektion
                 Speicherung der Adressierungsdetails in Skipliste


      Beispiel - HTML-Code
             <a h r e f =”/news /{{ news . i d }}”>{{news . t i t l e }}</a>




                                                                                              16 / 38
Einf¨hrung
    u                                          Compiler                           Clientmodul             R´sum´
                                                                                                           e   e




Adressierer - Beispiel
      Original HTML-Code
             <a h r e f =”/news /{{ news . i d }}”>{{news . t i t l e }}</a>




      HTML-Code nach Adressierer
             <a t p l =”13 u 9 0 8 f 0 d ” h r e f =”/news /{{ news . i d }}”>{{news . t i t l e }}</a>




      Adressierungsdetails
         { v a r news . i d :            {
                                               id    : ”13 u 9 0 8 f 0 d ” ,
                                               atr : ” href ” ,
                                               s t r : ”/ news/%s ”
                                          },
               v a r news . t i t l e   : {
                                               id    : ”13 u 9 0 8 f 0 d ” ,
                                               a t r : ” innerHTML ”
                                         }
         }


                                                                                                           17 / 38
Einf¨hrung
    u                                      Compiler                                   Clientmodul              R´sum´
                                                                                                                e   e




Generator

              generiert f¨r jeden Block einen passenden Funktionsaufruf
                         u
              schreibt alle gesammelten Informationen in eine JSON-Datei


      Struktur der Zieldatei
         { 1 :
                 [
                     [ tpl    t e x t (’< a t p l =”13 u 9 0 8 f 0 d ” h r e f =”/news / ’ , namespace ) ] ,
                     [ tpl    v a r ( ’ news . i d ’ , data , namespace ) ,
                      {id        : ”13 u 9 0 8 f 0 d ” , a t r : ” h r e f ” , s t r : ”/ news/%s ” } ] ,
                     [ tpl    t e x t ( ’” > ’ , namespace ) ] ,
                     [ tpl    v a r ( ’ news . t i t l e ’ , data , namespace ) , { A d r e s s e } ] ,
                     [ tpl    t e x t (’</a > ’ , namespace ) ]
                     [ tpl     i f (2 ,3 , data ) , {Adresse }]
                 ],
             2 : [ ...       h i e r kommen F u n k t i o n e n d e s I f −B l o c k s . . . ] ,
             3 : [ ...       h i e r kommen F u n k t i o n e n d e s E l s e−B l o c k s . . . ]
         }




                                                                                                                18 / 38
Einf¨hrung
    u                  Compiler   Clientmodul   R´sum´
                                                 e   e




Inhaltsverzeichnis



       1 Einf¨hrung
             u


       2 Compiler


       3 Clientmodul


       4 R´sum´
          e   e




                                                 19 / 38
Einf¨hrung
    u            Compiler           Clientmodul   R´sum´
                                                   e   e




Ablaufkonzept des Templatesystems




                                                   20 / 38
Einf¨hrung
    u                      Compiler               Clientmodul   R´sum´
                                                                 e   e




Templatemodul in Javascript


      Funktionen des Templatemoduls

             generiert HTML-Code aus Daten und Templates
             ubernimmt interne Pagenavigation
             ¨
             kommuniziert mit dem Server
             nutzt erweiterte Browserfunktionen (History API,
             Offlinecaching)
             kennt den aktuellen Anzeigezustand




                                                                 21 / 38
Einf¨hrung
    u            Compiler           Clientmodul   R´sum´
                                                   e   e




Ablaufkonzept des Templatesystems




                                                   22 / 38
Einf¨hrung
    u                      Compiler              Clientmodul              R´sum´
                                                                           e   e




Initialisierung des Templatemoduls

             Templatesystem funktioniert hybrid (Server & Client)
             ¨
             Ubergabe der n¨tigen Informationen und Zust¨nde bei
                             o                           a
             Initialisierung

      Initialisierungsablauf

             aktuelle URL-Matching-Liste wird vom Server geladen
             uberschreibt interne Linkevents mit Modulfunktionen
             ¨
             wartet auf zu verarbeitende Events
             k¨nnte w¨hrend des Warteprozesses schon m¨gliche zuk¨nftig
              o       a                               o          u
             ben¨tigte Inhalte vorladen
                o


                                                                           23 / 38
Implementierung - Eventloopansatz




   Ablauf des Template-Renderloops

       Eventlistener wird vor Aufruf der Templatefunktion gesetzt
       nach Berechnung wird das Ergebnis als Event zur¨ckgegeben
                                                        u
Implementierung - Eventloopansatz




   Evaluation des Ansatzes

    + erm¨glicht durch XMLHttpRequest verz¨gerte Templatebl¨cke
          o                                 o              o
    + ubersichtlich und leicht erweiterbar
      ¨
    – keine parallele Berechnung vorgesehen
Einf¨hrung
    u                       Compiler               Clientmodul            R´sum´
                                                                           e   e




Eventloopansatz - Erfahrungen und Probleme

      Probleme der Implementierung

             hohe Abh¨ngigkeit zum Javascript Framework Mootools
                     a
             Browserlimitierung “too much recursion” schon bei geringer
             Anzahl von Iterationen
             hoher Speicherbedarf durch Closures bei rekursivem Aufruf


      Erfahrungen bei praktische Anwendung

             Funktionsverlauf sehr leicht nachvollziehbar
             Debugging durch Nutzung eines Frameworks umst¨ndlich
                                                          a
             akzeptabele Performance bei Templategenerierung

                                                                           26 / 38
Einf¨hrung
    u                      Compiler             Clientmodul              R´sum´
                                                                          e   e




                  ¨
Mergeloopansatz - Uberblick

      Ziele des Mergeloopansatzes

             wenig Abh¨ngigkeiten f¨r einfache hybride Implementierung
                      a            u
             und Vergr¨ßerung der potentiellen Zielgruppe der Anwender
                      o
             keine Rekursion und nur n¨tige Abwicklung uber Events
                                      o                ¨
             erh¨hte Performance durch “return what you got”
                o


      Merge nach dem Loop

             effiziente Nutzung der Rechenzeit w¨hrend Wartevorgang
                                              a
             Spielraum f¨r weitere Optimierungen z.B. DOM-Baum
                        u
             vorparsen, Templates datenlos generieren


                                                                          27 / 38
Einf¨hrung
    u                      Compiler               Clientmodul           R´sum´
                                                                         e   e




Mergeloopansatz - Implementierung

      Ablauf der Implementierung

             ein Puffer in Form eines Arrays wird angelegt
             es wird uber das zu berechnende Template iteriert
                     ¨
             Templatefunktionen geben generierten Text oder
             Informationen uber den Kontrollfluss zur¨ck
                           ¨                        u
             fertig generierte Teile werden in den Puffer geschrieben
             fehlende Daten bekommen einen Platzhalter, werden beim
             Server angefragt und werden in Warteschlange gestellt
             abschließende Funktion f¨gt Ergebnisse zusammen, bis
                                      u
             Warteschlange leer ist und f¨gt das Ergebnis dann in den
                                         u
             DOM-Baum ein

                                                                         28 / 38
Einf¨hrung
    u                  Compiler   Clientmodul   R´sum´
                                                 e   e




Inhaltsverzeichnis



       1 Einf¨hrung
             u


       2 Compiler


       3 Clientmodul


       4 R´sum´
          e   e




                                                 29 / 38
Einf¨hrung
    u                      Compiler               Clientmodul           R´sum´
                                                                         e   e




Warum clientseitige Templatesysteme?



      Ziele meines Templatesystems . . .

             Beschleunigung von Benutzerinteraktionen
                 durch Entkoppelung der Struktur von den Daten k¨nnen
                                                                o
                 Templates clientseitig gecached werden
                 automatisierte Nutzung von modernen HTML5
                 Browserfunktionen
             Server endlasten




                                                                         30 / 38
Einf¨hrung
    u                      Compiler              Clientmodul      R´sum´
                                                                   e   e




Clientcaching

      Motivation

             redundante Daten¨bertragung m¨glichst ausschließen
                             u            o
             geringere Serverlast und h¨here Clientperformance
                                       o
             weniger Bandbreite wird verwendet z.B. wichtig f¨r
                                                             u
             Smartphones


      Umsetzung durch ETags

             Dateien und Templates werden dauerhaft gecached
             Daten m¨ssen auf validit¨t uberpr¨ft werden
                    u                a ¨      u


                                                                   31 / 38
Einf¨hrung
    u                              Compiler                           Clientmodul     R´sum´
                                                                                       e   e




Clientcaching - ETag in URL


      Permanentes Caching via ETag in URL

             Templates werden im HTML5 “local storage” gespeichert
             ETags von Dateien werden seperat vom Server geladen


      Validierendes Caching via ETag im HTTP-Header
      Beispiel Templateurl mit ETag:
             / b l o g / e n t r y −> / b l o g / e n t r y ? f a s j d f 9 0 1 2 h




                                                                                       32 / 38
Einf¨hrung
    u                      Compiler               Clientmodul        R´sum´
                                                                      e   e




Clientcaching - ETag in HTTP-Header



      Validierendes Caching via ETag im HTTP-Header

             Daten beim Server auf validit¨t uberpr¨ft
                                          a ¨      u
             Daten¨bertragung kann gespart werden
                  u
             ETags werden bei jeder Anfrage im Header mitgeschickt
             Templatemodul kann genutzt werden um vorhandene Daten
             schon ohne Validierung zu berechnen um Antwortzeit zu
             verk¨rzen
                 u




                                                                      33 / 38
Einf¨hrung
    u                               Compiler                            Clientmodul            R´sum´
                                                                                                e   e




HTML5 - History API

             History API erm¨glicht Manipulation der Browserhistory
                            o
             Zust¨nde k¨nnen problemlos per URL abgebildet werden
                 a     o
             Durch zustandsbewusstes Templatemodul Vor- und
             Zur¨cknavigation
                u
             ¨
             Anderungen k¨nnen durch Animationen dargestellt werden
                          o

      Beispiel Vergleich fr¨her zu heute
                           u
      fr¨her:
        u
             / b l o g/#page=e n t r y&i d=t e m p l a t e s y s t e m e −s i n d −s u p e r

      heute mit HTML5 History API
             / b l o g / e n t r y / t e m p l a t e s y s t e m e −s i n d −s u p e r


                                                                                                34 / 38
Einf¨hrung
    u                      Compiler              Clientmodul           R´sum´
                                                                        e   e




Praktische Implementierung - Ist-Zustand

      Templatecompiler

             Adressierung durch generische Datenanalyse
             generiert JSON-Template in vorgegebener Struktur


      Clientmodul

             generiert HTML-Code aus Daten und Templates
             Speichert Daten lokal und fragt fehlende beim Server an
             HTML5 History API wird komplett unterst¨tzt
                                                    u
             managed lokale Navigation uber Klickevents
                                       ¨


                                                                        35 / 38
Einf¨hrung
    u                      Compiler               Clientmodul              R´sum´
                                                                            e   e




Praktische Implementierung

      Was ist noch m¨glich?
                    o

                                ¨
             visualisierung der Anderungen durch Animationen oder
             Hervorhebungen
             Cacheinvalidierung durch ETags
             Nutzung der Adressinformation zur optimierung der
             Templategenerierung
             beschleunigte Kommunikation durch Implementierung von
             Websockets zum Datenmanagement
             Liveaktualisierung der Inhalte durch Adressierung einzelner
             Variablen und serverseitiger Zustandsverwaltung


                                                                            36 / 38
Einf¨hrung
    u                        Compiler              Clientmodul     R´sum´
                                                                    e   e




Warum ist so ein Templatesystem sinnvoll?
      Aus Sicht des Entwicklers

         + gewohnte Abl¨ufe bei der Applikationsentwicklung
                       a
         + automatische Optimierung des clientseitigen Cachings
         + geringere Serverlast
         + spart Großteil des clientseitigen Programmieraufwands
             – wenig Raum f¨r individualisierung
                           u
             – starke Systemabh¨ngigkeit
                               a

      Aus Sicht des Benutzer

         + geringe Wartezeit und ߬ssige Navigation
                                  u
             – Rechenaufwand und Speicherbedarf

                                                                    37 / 38
Einf¨hrung
    u             Compiler       Clientmodul   R´sum´
                                                e   e




Danke f¨r Ihre Aufmerksamkeit
       u




             Danke fur Ihre Aufmerksamkeit
                    ¨




                                                38 / 38

Más contenido relacionado

Destacado (20)

Los componentes del ordenador
Los componentes del ordenadorLos componentes del ordenador
Los componentes del ordenador
 
Curso html
Curso htmlCurso html
Curso html
 
Otro ambientes virtuales2014
Otro ambientes virtuales2014Otro ambientes virtuales2014
Otro ambientes virtuales2014
 
Poblaciones indígenas andrea sánchez_geralí
Poblaciones indígenas andrea sánchez_geralíPoblaciones indígenas andrea sánchez_geralí
Poblaciones indígenas andrea sánchez_geralí
 
Las redes sociales
Las redes socialesLas redes sociales
Las redes sociales
 
Playcomic
PlaycomicPlaycomic
Playcomic
 
Bones
BonesBones
Bones
 
Proyecto conflicto
Proyecto conflictoProyecto conflicto
Proyecto conflicto
 
Alimentación Sana
Alimentación SanaAlimentación Sana
Alimentación Sana
 
Lead Day Presentation
Lead Day PresentationLead Day Presentation
Lead Day Presentation
 
4033 chiminazzo lionela_tp9
4033 chiminazzo lionela_tp94033 chiminazzo lionela_tp9
4033 chiminazzo lionela_tp9
 
Xajax
XajaxXajax
Xajax
 
Video como recurso didacticos
Video como recurso didacticosVideo como recurso didacticos
Video como recurso didacticos
 
Aprendizaje electrónico
Aprendizaje electrónicoAprendizaje electrónico
Aprendizaje electrónico
 
Practica de_quimica
Practica  de_quimicaPractica  de_quimica
Practica de_quimica
 
Borrador cartilla salud ocupacional
Borrador cartilla salud ocupacionalBorrador cartilla salud ocupacional
Borrador cartilla salud ocupacional
 
Plan de gestión tics
Plan de gestión ticsPlan de gestión tics
Plan de gestión tics
 
Miguel sanchez hinestroza
Miguel sanchez hinestrozaMiguel sanchez hinestroza
Miguel sanchez hinestroza
 
Tutorial de Ms Word
Tutorial de Ms WordTutorial de Ms Word
Tutorial de Ms Word
 
Booklet : Ventas para Universidades
Booklet : Ventas para UniversidadesBooklet : Ventas para Universidades
Booklet : Ventas para Universidades
 

Similar a Bachelorarbeit - Scrup Templatesystem

AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungEduard Hildebrandt
 
Programmieren ohne Programmierer
Programmieren ohne ProgrammiererProgrammieren ohne Programmierer
Programmieren ohne ProgrammiererGerrit Beine
 
Anforderungsanalyse und UML Grundlagen
Anforderungsanalyse und UML GrundlagenAnforderungsanalyse und UML Grundlagen
Anforderungsanalyse und UML GrundlagenChristian Baranowski
 
20150923 ausführbare spezifikation_automotiveforum
20150923 ausführbare spezifikation_automotiveforum20150923 ausführbare spezifikation_automotiveforum
20150923 ausführbare spezifikation_automotiveforumElmar Selbach
 
Web to-print (Fortschrittsberichte der HdM Stuttgart 10/2011)
Web to-print (Fortschrittsberichte der HdM Stuttgart 10/2011)Web to-print (Fortschrittsberichte der HdM Stuttgart 10/2011)
Web to-print (Fortschrittsberichte der HdM Stuttgart 10/2011)Hochschule der Medien
 
B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009Andreas Schulte
 
Metamodellierung und Validierung
Metamodellierung und ValidierungMetamodellierung und Validierung
Metamodellierung und Validierungfoobar2605
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web ToolkitTorben Brodt
 
Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?GFU Cyrus AG
 
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...Community ITmitte.de
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Jürg Stuker
 
SQL 2012: Reporting Services – Reporting und die Infrastruktur
SQL 2012: Reporting Services – Reporting und die InfrastrukturSQL 2012: Reporting Services – Reporting und die Infrastruktur
SQL 2012: Reporting Services – Reporting und die InfrastrukturDigicomp Academy AG
 
Unic Analytics-Breakfast - Webanalyse bei Thieme
Unic Analytics-Breakfast - Webanalyse bei ThiemeUnic Analytics-Breakfast - Webanalyse bei Thieme
Unic Analytics-Breakfast - Webanalyse bei ThiemeUnic
 
Good by Server... Hello Client!
Good by Server... Hello Client!Good by Server... Hello Client!
Good by Server... Hello Client!Sandro Sonntag
 

Similar a Bachelorarbeit - Scrup Templatesystem (20)

AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
 
imatics FormEngine
imatics FormEngineimatics FormEngine
imatics FormEngine
 
CodeFluent Entities and AppSofa
CodeFluent Entities and AppSofaCodeFluent Entities and AppSofa
CodeFluent Entities and AppSofa
 
Programmieren ohne Programmierer
Programmieren ohne ProgrammiererProgrammieren ohne Programmierer
Programmieren ohne Programmierer
 
Camunda BPM 7.2 - Deutsch
Camunda BPM 7.2 - DeutschCamunda BPM 7.2 - Deutsch
Camunda BPM 7.2 - Deutsch
 
Anforderungsanalyse und UML Grundlagen
Anforderungsanalyse und UML GrundlagenAnforderungsanalyse und UML Grundlagen
Anforderungsanalyse und UML Grundlagen
 
20150923 ausführbare spezifikation_automotiveforum
20150923 ausführbare spezifikation_automotiveforum20150923 ausführbare spezifikation_automotiveforum
20150923 ausführbare spezifikation_automotiveforum
 
Web to-print (Fortschrittsberichte der HdM Stuttgart 10/2011)
Web to-print (Fortschrittsberichte der HdM Stuttgart 10/2011)Web to-print (Fortschrittsberichte der HdM Stuttgart 10/2011)
Web to-print (Fortschrittsberichte der HdM Stuttgart 10/2011)
 
B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009
 
Metamodellierung und Validierung
Metamodellierung und ValidierungMetamodellierung und Validierung
Metamodellierung und Validierung
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?
 
Systementwurf mit UML
Systementwurf mit UMLSystementwurf mit UML
Systementwurf mit UML
 
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001
 
SQL 2012: Reporting Services – Reporting und die Infrastruktur
SQL 2012: Reporting Services – Reporting und die InfrastrukturSQL 2012: Reporting Services – Reporting und die Infrastruktur
SQL 2012: Reporting Services – Reporting und die Infrastruktur
 
OSLC in Aktion
OSLC in AktionOSLC in Aktion
OSLC in Aktion
 
Unic Analytics-Breakfast - Webanalyse bei Thieme
Unic Analytics-Breakfast - Webanalyse bei ThiemeUnic Analytics-Breakfast - Webanalyse bei Thieme
Unic Analytics-Breakfast - Webanalyse bei Thieme
 
JavaFX Real-World Apps
JavaFX Real-World AppsJavaFX Real-World Apps
JavaFX Real-World Apps
 
Good by Server... Hello Client!
Good by Server... Hello Client!Good by Server... Hello Client!
Good by Server... Hello Client!
 

Bachelorarbeit - Scrup Templatesystem

  • 1. Einf¨hrung u Compiler Clientmodul R´sum´ e e Bachelorarbeit Entwicklung eines clientseitigen Webtemplatesystems mit generischer Datenanalyse Tobias Nentwig 18. Januar 2011 1 / 38
  • 2. Einf¨hrung u Compiler Clientmodul R´sum´ e e Inhaltsverzeichnis 1 Einf¨hrung u 2 Compiler 3 Clientmodul 4 R´sum´ e e 2 / 38
  • 3. Einf¨hrung u Compiler Clientmodul R´sum´ e e Webtemplates Templates sind Vorlagen f¨r Dokumente u speichern visuelle Logik betten Daten & Logik in HTML-Struktur ein generieren HTML-Code f¨r die Darstellung im Browser u 3 / 38
  • 4. Einf¨hrung u Compiler Clientmodul R´sum´ e e Serverseitiges Templatesystem Ablauf Eigenschaften Server bekommt Request + zentrale Berechnung Daten werden aufbereitet + leicht skalierbar Template wird gerendered – hohe Serverlast HTML-Code als Antwort 4 / 38
  • 5. Einf¨hrung u Compiler Clientmodul R´sum´ e e Clientseitiges Templatesystem Ablauf Daten und Templatedaten werden beim Server abgefragt Sind beide Anfragen erfolgreich, wird das Template geparsed Der daraus resultierende DOM-Baum wird in vorhandene Strukturen eingebettet 5 / 38
  • 6. Einf¨hrung u Compiler Clientmodul R´sum´ e e Warum clientseitige Templatesysteme? Ziele meines Templatesystems . . . Beschleunigung von Benutzerinteraktionen durch Entkoppelung der Struktur von den Daten k¨nnen o Templates clientseitig gecached werden automatisierte Nutzung von modernen HTML5 Browserfunktionen Server endlasten 6 / 38
  • 7. Einf¨hrung u Compiler Clientmodul R´sum´ e e Warum Datenanalyse im Templatesystem? Datenanalyse zur Adressierung der Templatekonstrukte Adressierung der Templatekonstrukte wird genutzt um . . . Template rendern, ohne dass alle Daten vorhanden sind Inhalte k¨nnen live aktualisiert werden o ¨ Anderungen k¨nnen automatisch durch Animationen o visualisiert werden – erh¨hter Speicherbedarf durch Adressierungsinformationen o 7 / 38
  • 8. Einf¨hrung u Compiler Clientmodul R´sum´ e e Warum Templates compilieren? Ziele meines Compilers . . . + Datenanalyse zu aufw¨ndig f¨r Liveinterpreter a u + nur datenabh¨ngige Berechnungen beim Rendern durchf¨hren a u + Performancegewinn durch optimierte Templatestruktur + Unterst¨tzung f¨r Clients mit schwacher Rechenleistung u u (Smartphones) – reultierende Templates unleserlich und manipuliert 8 / 38
  • 9. Einf¨hrung u Compiler Clientmodul R´sum´ e e Inhaltsverzeichnis 1 Einf¨hrung u 2 Compiler 3 Clientmodul 4 R´sum´ e e 9 / 38
  • 10. Einf¨hrung u Compiler Clientmodul R´sum´ e e Ablaufkonzept des Templatesystems 10 / 38
  • 11. Einf¨hrung u Compiler Clientmodul R´sum´ e e Konstrukte des original Templates Templatesprache basiert syntaktisch auf der Django Template Language grundlegende Funktionen sind implementiert Implementierte Konstrukte Variablen {{foo.bar}} durch doppelt geschweiften Klammern werden Variablen in Javascript Object Notation aufgerufen Funktionsbl¨cke o {% if %}{% else %}{% end %} logischer Block der nur bei erf¨llter Bedingung generiert wird u 11 / 38
  • 12. Einf¨hrung u Compiler Clientmodul R´sum´ e e Konstrukte des original Templates Weitere implementierte Konstrukte Funktionsbl¨cke o {% for var in list %}{% end %} iteration uber Liste ¨ {% include template %} das Template wird eingebunden {% extends template %} erweitert ubergebenes Template ¨ {% block %}{% end %} bindet Inhalt in Muttertemplate ein Fehlende Funktionen Filter f¨r Variablen z.B. HTML-Escape oder Datumsfilter u spezielle logische Bl¨cke f¨r For-Loops z.B. odd, even, first . . . o u 12 / 38
  • 13. Einf¨hrung u Compiler Clientmodul R´sum´ e e Ablaufkonzept des Templatesystems 13 / 38
  • 14. Einf¨hrung u Compiler Clientmodul R´sum´ e e Aufbau des Compilers Funktion des Compilers generiert strukturiertes Template im JSON-Format manipuliert Quellcode um Adressierung zu erm¨glichen o Drei Schritte zum JSON-Template 14 / 38
  • 15. Einf¨hrung u Compiler Clientmodul R´sum´ e e Parser blockweise Aufspaltung durch regul¨re Ausdr¨cke a u f¨gt Bl¨cke in spezielle, doppelt verketteten Skipliste u o 15 / 38
  • 16. Einf¨hrung u Compiler Clientmodul R´sum´ e e Adressierer Aufgaben des Adressierers Lokationsanalyse der Templatekonstrukte Manipulation durch Adressinjektion Speicherung der Adressierungsdetails in Skipliste Beispiel - HTML-Code <a h r e f =”/news /{{ news . i d }}”>{{news . t i t l e }}</a> 16 / 38
  • 17. Einf¨hrung u Compiler Clientmodul R´sum´ e e Adressierer - Beispiel Original HTML-Code <a h r e f =”/news /{{ news . i d }}”>{{news . t i t l e }}</a> HTML-Code nach Adressierer <a t p l =”13 u 9 0 8 f 0 d ” h r e f =”/news /{{ news . i d }}”>{{news . t i t l e }}</a> Adressierungsdetails { v a r news . i d : { id : ”13 u 9 0 8 f 0 d ” , atr : ” href ” , s t r : ”/ news/%s ” }, v a r news . t i t l e : { id : ”13 u 9 0 8 f 0 d ” , a t r : ” innerHTML ” } } 17 / 38
  • 18. Einf¨hrung u Compiler Clientmodul R´sum´ e e Generator generiert f¨r jeden Block einen passenden Funktionsaufruf u schreibt alle gesammelten Informationen in eine JSON-Datei Struktur der Zieldatei { 1 : [ [ tpl t e x t (’< a t p l =”13 u 9 0 8 f 0 d ” h r e f =”/news / ’ , namespace ) ] , [ tpl v a r ( ’ news . i d ’ , data , namespace ) , {id : ”13 u 9 0 8 f 0 d ” , a t r : ” h r e f ” , s t r : ”/ news/%s ” } ] , [ tpl t e x t ( ’” > ’ , namespace ) ] , [ tpl v a r ( ’ news . t i t l e ’ , data , namespace ) , { A d r e s s e } ] , [ tpl t e x t (’</a > ’ , namespace ) ] [ tpl i f (2 ,3 , data ) , {Adresse }] ], 2 : [ ... h i e r kommen F u n k t i o n e n d e s I f −B l o c k s . . . ] , 3 : [ ... h i e r kommen F u n k t i o n e n d e s E l s e−B l o c k s . . . ] } 18 / 38
  • 19. Einf¨hrung u Compiler Clientmodul R´sum´ e e Inhaltsverzeichnis 1 Einf¨hrung u 2 Compiler 3 Clientmodul 4 R´sum´ e e 19 / 38
  • 20. Einf¨hrung u Compiler Clientmodul R´sum´ e e Ablaufkonzept des Templatesystems 20 / 38
  • 21. Einf¨hrung u Compiler Clientmodul R´sum´ e e Templatemodul in Javascript Funktionen des Templatemoduls generiert HTML-Code aus Daten und Templates ubernimmt interne Pagenavigation ¨ kommuniziert mit dem Server nutzt erweiterte Browserfunktionen (History API, Offlinecaching) kennt den aktuellen Anzeigezustand 21 / 38
  • 22. Einf¨hrung u Compiler Clientmodul R´sum´ e e Ablaufkonzept des Templatesystems 22 / 38
  • 23. Einf¨hrung u Compiler Clientmodul R´sum´ e e Initialisierung des Templatemoduls Templatesystem funktioniert hybrid (Server & Client) ¨ Ubergabe der n¨tigen Informationen und Zust¨nde bei o a Initialisierung Initialisierungsablauf aktuelle URL-Matching-Liste wird vom Server geladen uberschreibt interne Linkevents mit Modulfunktionen ¨ wartet auf zu verarbeitende Events k¨nnte w¨hrend des Warteprozesses schon m¨gliche zuk¨nftig o a o u ben¨tigte Inhalte vorladen o 23 / 38
  • 24. Implementierung - Eventloopansatz Ablauf des Template-Renderloops Eventlistener wird vor Aufruf der Templatefunktion gesetzt nach Berechnung wird das Ergebnis als Event zur¨ckgegeben u
  • 25. Implementierung - Eventloopansatz Evaluation des Ansatzes + erm¨glicht durch XMLHttpRequest verz¨gerte Templatebl¨cke o o o + ubersichtlich und leicht erweiterbar ¨ – keine parallele Berechnung vorgesehen
  • 26. Einf¨hrung u Compiler Clientmodul R´sum´ e e Eventloopansatz - Erfahrungen und Probleme Probleme der Implementierung hohe Abh¨ngigkeit zum Javascript Framework Mootools a Browserlimitierung “too much recursion” schon bei geringer Anzahl von Iterationen hoher Speicherbedarf durch Closures bei rekursivem Aufruf Erfahrungen bei praktische Anwendung Funktionsverlauf sehr leicht nachvollziehbar Debugging durch Nutzung eines Frameworks umst¨ndlich a akzeptabele Performance bei Templategenerierung 26 / 38
  • 27. Einf¨hrung u Compiler Clientmodul R´sum´ e e ¨ Mergeloopansatz - Uberblick Ziele des Mergeloopansatzes wenig Abh¨ngigkeiten f¨r einfache hybride Implementierung a u und Vergr¨ßerung der potentiellen Zielgruppe der Anwender o keine Rekursion und nur n¨tige Abwicklung uber Events o ¨ erh¨hte Performance durch “return what you got” o Merge nach dem Loop effiziente Nutzung der Rechenzeit w¨hrend Wartevorgang a Spielraum f¨r weitere Optimierungen z.B. DOM-Baum u vorparsen, Templates datenlos generieren 27 / 38
  • 28. Einf¨hrung u Compiler Clientmodul R´sum´ e e Mergeloopansatz - Implementierung Ablauf der Implementierung ein Puffer in Form eines Arrays wird angelegt es wird uber das zu berechnende Template iteriert ¨ Templatefunktionen geben generierten Text oder Informationen uber den Kontrollfluss zur¨ck ¨ u fertig generierte Teile werden in den Puffer geschrieben fehlende Daten bekommen einen Platzhalter, werden beim Server angefragt und werden in Warteschlange gestellt abschließende Funktion f¨gt Ergebnisse zusammen, bis u Warteschlange leer ist und f¨gt das Ergebnis dann in den u DOM-Baum ein 28 / 38
  • 29. Einf¨hrung u Compiler Clientmodul R´sum´ e e Inhaltsverzeichnis 1 Einf¨hrung u 2 Compiler 3 Clientmodul 4 R´sum´ e e 29 / 38
  • 30. Einf¨hrung u Compiler Clientmodul R´sum´ e e Warum clientseitige Templatesysteme? Ziele meines Templatesystems . . . Beschleunigung von Benutzerinteraktionen durch Entkoppelung der Struktur von den Daten k¨nnen o Templates clientseitig gecached werden automatisierte Nutzung von modernen HTML5 Browserfunktionen Server endlasten 30 / 38
  • 31. Einf¨hrung u Compiler Clientmodul R´sum´ e e Clientcaching Motivation redundante Daten¨bertragung m¨glichst ausschließen u o geringere Serverlast und h¨here Clientperformance o weniger Bandbreite wird verwendet z.B. wichtig f¨r u Smartphones Umsetzung durch ETags Dateien und Templates werden dauerhaft gecached Daten m¨ssen auf validit¨t uberpr¨ft werden u a ¨ u 31 / 38
  • 32. Einf¨hrung u Compiler Clientmodul R´sum´ e e Clientcaching - ETag in URL Permanentes Caching via ETag in URL Templates werden im HTML5 “local storage” gespeichert ETags von Dateien werden seperat vom Server geladen Validierendes Caching via ETag im HTTP-Header Beispiel Templateurl mit ETag: / b l o g / e n t r y −> / b l o g / e n t r y ? f a s j d f 9 0 1 2 h 32 / 38
  • 33. Einf¨hrung u Compiler Clientmodul R´sum´ e e Clientcaching - ETag in HTTP-Header Validierendes Caching via ETag im HTTP-Header Daten beim Server auf validit¨t uberpr¨ft a ¨ u Daten¨bertragung kann gespart werden u ETags werden bei jeder Anfrage im Header mitgeschickt Templatemodul kann genutzt werden um vorhandene Daten schon ohne Validierung zu berechnen um Antwortzeit zu verk¨rzen u 33 / 38
  • 34. Einf¨hrung u Compiler Clientmodul R´sum´ e e HTML5 - History API History API erm¨glicht Manipulation der Browserhistory o Zust¨nde k¨nnen problemlos per URL abgebildet werden a o Durch zustandsbewusstes Templatemodul Vor- und Zur¨cknavigation u ¨ Anderungen k¨nnen durch Animationen dargestellt werden o Beispiel Vergleich fr¨her zu heute u fr¨her: u / b l o g/#page=e n t r y&i d=t e m p l a t e s y s t e m e −s i n d −s u p e r heute mit HTML5 History API / b l o g / e n t r y / t e m p l a t e s y s t e m e −s i n d −s u p e r 34 / 38
  • 35. Einf¨hrung u Compiler Clientmodul R´sum´ e e Praktische Implementierung - Ist-Zustand Templatecompiler Adressierung durch generische Datenanalyse generiert JSON-Template in vorgegebener Struktur Clientmodul generiert HTML-Code aus Daten und Templates Speichert Daten lokal und fragt fehlende beim Server an HTML5 History API wird komplett unterst¨tzt u managed lokale Navigation uber Klickevents ¨ 35 / 38
  • 36. Einf¨hrung u Compiler Clientmodul R´sum´ e e Praktische Implementierung Was ist noch m¨glich? o ¨ visualisierung der Anderungen durch Animationen oder Hervorhebungen Cacheinvalidierung durch ETags Nutzung der Adressinformation zur optimierung der Templategenerierung beschleunigte Kommunikation durch Implementierung von Websockets zum Datenmanagement Liveaktualisierung der Inhalte durch Adressierung einzelner Variablen und serverseitiger Zustandsverwaltung 36 / 38
  • 37. Einf¨hrung u Compiler Clientmodul R´sum´ e e Warum ist so ein Templatesystem sinnvoll? Aus Sicht des Entwicklers + gewohnte Abl¨ufe bei der Applikationsentwicklung a + automatische Optimierung des clientseitigen Cachings + geringere Serverlast + spart Großteil des clientseitigen Programmieraufwands – wenig Raum f¨r individualisierung u – starke Systemabh¨ngigkeit a Aus Sicht des Benutzer + geringe Wartezeit und fl¨ssige Navigation u – Rechenaufwand und Speicherbedarf 37 / 38
  • 38. Einf¨hrung u Compiler Clientmodul R´sum´ e e Danke f¨r Ihre Aufmerksamkeit u Danke fur Ihre Aufmerksamkeit ¨ 38 / 38