Frontend-Architektur der1&1 BestellsystemeWebTech Conference | 2010
Hi!Seit 2003 bei der 1&1 Internet AGAbteilung betreut die Bestellsysteme der 1&1 (Shops)Experte für Frontend-TechnologienHTML, XML, CSS, JavaScriptAccessibility, Website Performance, AJAX, SuchmaschinenoptimierungNico
Was erwartet euch?Frontend, Frontend, FrontendInspirationModularisierung und OrganisationPerformance-OptimierungStatische CodeanalysenFrontend-Kennzahlen
Eigenschaften der 1&1 ShopsCa. 30 verschieden große WebapplikationenSehr hohe ÄnderungsfrequenzProdukte, Kampagnen, RedesignsEinheitliche Layouts gewünschtAusnahmen müssen möglich seinInternationalisierung für UK, US, FR, ES, PL
Eigenschaften der 1&1 ShopsCa. 30 verschieden große WebapplikationenSehr hohe ÄnderungsfrequenzProdukte, Kampagnen, RedesignsEinheitliche Layouts gewünschtAusnahmen müssen möglich seinInternationalisierung für UK, US, FR, ES, PL
Modularisierung und Organisation
DatenbankServer-LogikFrontendCSS + IMG +Script + HTML
DatenbankDatenbankServer-LogikServer-LogikFrontendFrontendCSS + IMG +Script + HTMLCSS + IMG +Script + HTMLWebsiteBlogDatenbankDatenbankServer-LogikServer-LogikFrontendFrontendCSS + IMG +Script + HTMLCSS + IMG +Script + HTMLE-ShopIntranet
Wie share ich gemeinsame Ressourcen?DatenbankDatenbankServer-LogikServer-LogikFrontendFrontendCSS + IMG +Script + HTMLCSS + IMG +Script + HTMLWebsiteBlogDatenbankDatenbankServer-LogikServer-LogikFrontendFrontendCSS + IMG +Script + HTMLCSS + IMG +Script + HTMLE-ShopIntranetgrid.cssreset.cssJavaScript-LibraryBasis-Styles
30 verschiedene Shops…
1&1 BestellsystemeDatenbankDatenbankDatenbankDatenbankLogikLogikLogikLogikLogikLogikLogikLogikLogikLogikLogikLogikLogikLogikLogikLogikFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendFrontendWie share ich gemeinsame Ressourcen?
Module!CSSIMGScriptXML
Module stellen Ressourcen zentral bereit
Beispiel-Modul ADSLMobile InternetHosting
Beispiel-Modul BBestandskundenHosting SpanienInterne Tools
Module sind versionierbar
Formular-ModulAlte VersionNeue Version
50 Module und ApplikationenModuleApplikationenDSLAutocompletionFormulareJS Basis-BibliothekHostingBestandskundenShop-SkinStopperMobile Internet
FrüherMit Build-Script readonly in Applikation kopierenNachteil: Build nach jeder Änderunghtdocs/modules/skin/imghtdocs/modules/skin/styles
LösungIn Applikation kopieren und „life“ editierbar machenNachteil: Module und Applikationen basieren auf unterschiedlichen Technologienhtdocs/modules/skin/imghtdocs/modules/skin/styles
LösungModularisierung des Applikations-Codes (Java)Maven als gemeinsame Basis-Technologie für Module und ApplikationenEinheitliches Build-SystemEinheitliche Verzeichnisstruktur
WorkspaceBündelt Frontend-Module und Applikations-Module je nach Anwendungsfall„Verdrahtet“ diese automatisch untereinanderAktionen: Open / Close / Update / CommitVerwaltung mit Subversion: Checkouts / Branches
Beispiele
Hosting-WorkspaceHosting UsHosting UKShopskinHosting PLHosting DEFormulare
Hosting-Workspace
BK-Shop-WorkspaceMobile BK-ShopDSL BK-ShopHosting BK-ShopFormulareShopskin
BK-Shop-Workspace
FazitModularisierung bietet sich für komplexe Systeme anVersionierung für die Unterstützung/Pflege älterer EntwicklungenWorkspaces für beliebige Kombinationen von Modulen und ApplikationenPermanent bei zusammengehörigen ApplikationenFür den Zeitraum eines Projekts / Kampagne / Redesigns
http://maven.apache.org/http://subversion.apache.org/
Performance-Optimierung
Performance-Optimierung20072009Steve Souders
Studienhttp://www.webperformancetoday.com/2010/07/01/the-best-graphs-of-velocity/
Typische Frontend-RessourcenCSSIMGScriptXML
Typische Frontend-RessourcenCSSIMGScriptXMLJasmin
Typische Frontend-RessourcenCSSIMGCDSScriptXML
Typische Frontend-RessourcenCSSIMGScriptXMLPustefixFramework
JasminSchönheit aus 1001 Nacht?http://www.flickr.com/photos/honma/4084355466
JasminNur ein Servlet;-)JavaScript MinifierModularisierung mit DependenciesWenige HTTP RequestsMinimiert und komprimiert RessourcenErgänzt Far Future Expires Header
Modularisierung mit DependenciesQooxdooDependencyAutocompletionWebservice.jsautocompletion.jsautocompletion.css
Modularisierung mit Dependencies<LINK href=“/xml/jasmin/dslorder+clearfix+autocompletion/css“><SCRIPT src=“/xml/jasmin/dslorder+clearfix+autocompletion/js“>
Wenige HTTP Requests„Lade für alle Seiten die Ressourcen des DSL-Projekts und zusätzlichnur für die Seite DslCheck die Ressourcen der Autocompletion.“DslStartDslMobileDslCheckdslorderdslorderdslorder1. Requestautocompletion2. Request
Wenige HTTP Requests„Lade für alle Seiten die Ressourcen des DSL-Projekts und zusätzlichnur für die Seite DslCheck die Ressourcen der Autocompletion.“1. Request2. RequestgZip1. Seite2. Seite
MinimierungOptimierte VersionOriginal/**** zip:/home/servlet/pfixschlundAS_b/style/reset.css */html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, font, img, ins, kbd, q, s, samp,small, strike, strong, sub, tt, var,dl, dt, dd, ol, ul, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td {margin: 0;padding: 0;border: 0;  /*outline: 0;*/font-weight: inherit;font-style: inherit;font-size: 100%;font-family: inherit;vertical-align: baseline;}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;} sup{line-height:0;font-size:60%;}body{line-height:1;color:black;background:white;}ol,ul{list-style:none;}table{border-collapse:separate;border-spacing:0;}caption,th,td{text-align:left;fontweight:normal;}blockquote:before,blockquote:after,q:before,q:after{content:"";}blockquote,q{quotes:"" "";}.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden;}/* Hidesfrom IE-mac \*/ .clearfix{display:block;}/* End hidefrom IE-mac */ #skipmenu{position:absolute;top:10px;left:10px;width:180px;z-index:100;}a.skiptarget{display:block;width:0;height:0;overflow:hidden;}a.skip{fontsize:11px;texttransform:uppercase;textdecoration:none;}a.skip,a.skip:link,a.skip:visited{position:absolute;top:999em;}a.skip:focus,a.skip:active{outline:1px dotted #fff;color:#fff;position:absolute;top:0;left:0;}
KomprimierunggZipEinsparung: 70%
JasminErgänzt Far Future Expires HeaderErkläre ichSpäter…
Content Delivery Server (CDS)CSSIMGCDSScriptXML
Content Delivery Server (CDS)Liefert sämtliche Media-Daten wie Grafiken, Flash, PDF usw. ausErmittelt Kennzahlen zu diesen RessourcenErgänzt einen Far Future Expires HeaderErhöht die Anzahl der parallelen DownloadsLiefert Ressourcen unter eigener Domain ausSoll zu einem Content Delivery Network ausgebaut werden
Content Delivery Server (CDS)ApacheCDShtdocsInternet
Far Future Expires Header2,5 Sekunden!Far Future Expires Header: 	„Diese Ressource verändert sich für die			nächsten 15 Jahre nicht und kann immer			aus dem Cache bezogen werden.“
Far Future Expires Header„Wie erzwinge ich ein Neuladen, wenn sich die Ressource dochverändern sollte?“
Far Future Expires HeaderInternet/img/footer/ui-logo.gifPublish<imgsrc=„http://uicdn.net/32j4g23j4-ui-logo.gif“>url(http://uicdn.net/32j4g23j4-ui-logo.gif)HTML<imgsrc=„/img/footer/ui-logo.gif“>url(/img/footer/ui-logo.gif)MD5-Hash/img/footer/ui-logo.gif32j4g23j4-ui-logo.gifCDSExpires HeaderSync auf CDS
Parallele Downloads
Content Delivery Server (CDS)Warum eine eigene Domain?Darum
Content Delivery Server (CDS)* Aufruf ohne Cache, Dulles (USA), IE7, 1.5 MBit
Content Delivery Server (CDS)* Aufruf mit Cache, Dulles (USA), IE7, 1.5 MBit
Content Delivery Server (CDS)* Aufruf mit Cache, Dulles (USA), IE7, 1.5 MBit
Content Delivery NetworkEuropaLenexaKarlsruheAtlantikUSA
Kennzahlen„Welche Größe haben die Daten, welche von den verschiedenen Seiten einesProjekts abgerufen werden?“„Werden Daten angefragt, die nicht verfügbar sind (404)?“http://zoompf.com/2010-state-of-web-performance-report
Content Delivery Server (CDS)http://www.youtube.com/watch?v=IWWBnJEsUtU„Larry Page hat einmal die Vision geäußert, Webseiten so schnell browsen zu können, wie man die Seiten in einem Hochglanzmagazin umblättert.“
Content Delivery Server (CDS)
Content Delivery Server (CDS)onLoad:Webservice.getNextGraphics();„Image Prefetching“
Performance-Optimierunghttp://www.youtube.com/watch?v=ANMrzw7JFzAhttp://www.youtube.com/watch?v=0QRO3gKj3qw
Statische Codeanalysen
Statische CodeanalysenProblematischer Frontend-CodeInline-Code (Styles und Events)Deprecated Attributes (clear, target, align)Blank-GifsVerwendung interner TemplatesBlock-Elemente innerhalb von Inline-Elementen
Statische CodeanalysenTeil des Build-ProzessRegeln in Xpath-Syntax	//@style		//pfx:button//div	//@target		//shop:price//div	//@onclick		//shop:countdown//div	//br/br	//img[@width=“1“ and @height=“1“]
Statische CodeanalysenInitialer Aufwand nötigDanach …http://www.flickr.com/photos/29208923@N06/3755752618/
Frontend-Kennzahlen
Wie groß sind die ausgelieferten Ressourcen?Pro ApplikationPro SeiteWerden Ressourcen nicht gefunden?Gibt es Ausreißer?Gibt es überflüssige Ressourcen?
CDSGrafiken / FlashJasminApacheCSS / JSHTMLGrößeFehlende Ress.Überflüssige Ress.GrößeUngenutzte CSS-SelektorenJavaScript-FehlerGrößeFehlende Dokumente
Beispiel: JavaScript-Fehler
HorstMarcoRalfJohannesDietmarMatthiasHelenaKerimAlexAndreNedaRalphMathiasGregorAndiNicoMatthiasKilianUli
Fragen?nico.steiner@1und1.de@sensationalseowww.nicosteiner.dewww.slideshare.net/n.steiner
Vielen Dank für eureAufmerksamkeit!nico.steiner@1und1.de@sensationalseowww.nicosteiner.dewww.slideshare.net/n.steiner

Frontend-Architektur der 1&1 Bestellsysteme