• Save
Nie mehr weltweites Warten - Performance-Tuning für JSF-Anwendungen
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Nie mehr weltweites Warten - Performance-Tuning für JSF-Anwendungen

on

  • 1,605 views

Slides in German for my Talk at JAX 2013

Slides in German for my Talk at JAX 2013

Statistics

Views

Total Views
1,605
Views on SlideShare
1,605
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Nie mehr weltweites Warten - Performance-Tuning für JSF-Anwendungen Presentation Transcript

  • 1. Orientation in Objects GmbHWeinheimer Str. 6868309 Mannheimwww.oio.deinfo@oio.deVersion:Nie mehr weltweitesWartenPerformancetuning für JSF-Anwendungen
  • 2. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHIhr Sprecher2Thomas AselTrainer, Berater, EntwicklerSchwerpunkteFrontend-Architektur,Entwicklung von Web-Anwendungen,Web-Performance-Optimierunghttp://blog.oio.de@Tom_Aselthomas.asel@oio.de
  • 3. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHDas war in der Schachtel …3Komponenten-ModellArchitektur-ModellProgrammier-ModellResourceHandlingLifecycle… viele, viele,Bibliotheken
  • 4. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHFear, Uncertainty, DoubtJSF ist doch …4oldschoolschwerfälligschwieriglangsam
  • 5. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHPerformance optimieren – Auf welcher Ebene?JVM-EbeneJSF-EbeneWeb-Ebene• Heap-Size• GarbageCollection• Lifecycle• Komponenten• Requests• Caching5
  • 6. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHOnly 10%-20% of End-UserResponse-Time is spentdonwloading the HTMLdocument.6Steve Souders- Web-Performance Guru, Yahoo
  • 7. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHWelt-Weites-Warten7Browser Servlet-ContainerGET /index.jsfJSF-LifecycleRestoreViewRender ResponseGET stylesheet.cssGET script.jsGET logo.pngJSF ResponseTimeResourceLoading"LATENZ"
  • 8. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHOptimierungsmassnahmen - Anforderungen• Postiver Effekt auf– JSF Response Time– Resource Loading– Netzwerk Latenzen• Geringe Auswirkungen auf– Anwendungs-Architektur– Programmiermodell– Deployment• Tooling:– Integration in bestehenden Toolstack– (JSF) – Bordmittel8
  • 9. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHOptimierungsmassnahmen – Easy Winner• JSF Response Time– Kompontenbaum– Implementierungsunterschiede• Resource-Loading– Combined Resources– Caching– Ressourcen auslagern– Komprimierung9Browser Servlet-ContainerGET /index.jsfJSF-LifecycleRestoreViewRender ResponseGET stylesheet.cssGET script.jsGET logo.png
  • 10. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHGliederung• JSF Response Time– Kompontenbaum– Implementierungsunterschiede• Resource-Loading– Combined Resources– Caching– Ressourcen auslagern– Komprimierung10Browser Servlet-ContainerGET /index.jsfJSF-LifecycleRestoreViewRender ResponseGET stylesheet.cssGET script.jsGET logo.png
  • 11. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHJSF - Komponentenbaum11UIViewRootHtmlFormHtmlOutputTextHtmlInputTextHtmlOutcomeTargetLink
  • 12. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbH 12JSFLifecycleApplyRequestValuesValidationUpdateModelInvokeApplicationRenderResponseRestoreView
  • 13. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHJSF - Komponentenbaum• Wird im Lifecycle mehrfach traversiertBesonders aufwendig:• Phase1:– Erzeugung / Wiederherstellung• Client-Side State-Saving: Deserialisierung• Phase 6:– Rendering13
  • 14. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHDauer der Lifecylce-Phasen - Vergleichsmessung14C=10C=100C=250C=500C=1…0102030405060123456Duration[ms]PhaseQuelle: http://bit.ly/myfaces-vs-mojarra
  • 15. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHDauer der Lifecylce-Phasen – Anteilig15051015202530354045500 1 2 3 4 5 6 7%ofLifecycleDurationLifecycle PhaseRestoreViewApplyRequestValuesValidationUpdateModelInvokeApplicationRenderResponse
  • 16. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHAnzahl Components / View• Beobachtet:– < 50 eher selten– Mittelwert ca. 250– Ausnahmefälle > 3000• Ursache:– Unnötiger Gebrauch von JSF-Komponenten• Falscher Gebrauch von Composite Components– "Dead Code": rendered="false"• Trotzdem Teil des Komponentenbaumes– Komplexität• z.B.: verschachtelte Tabbed Panes1654 Components!
  • 17. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHBrauchen wir dafür JSF – Komponenten?17<ol id="ordered_list" class="ui-datalist-data"><li class="ui-datalist-item">Chrysler, 1965</li>...<ol>
  • 18. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHLösung:Es müssen nicht immer Composites sein …• Custom-Tags<my:spacer height="100" />• Decorator<my:infoBox type="warning" ><h:message for="selection" /></my:infoBox>• Includes<ui:include src="footer.xhtml" />• Composite-Components<my:orderForm value="#{order}" showAll="true"><f:validateRequired for="address" /></my:orderForm>18
  • 19. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHGliederung• JSF Response Time– Kompontenbaum– Implementierungsunterschiede• Resource-Loading– Combined Resources– Caching– Ressourcen auslagern– Komprimierung19Browser Servlet-ContainerGET /index.jsfJSF-LifecycleRestoreViewRender ResponseGET stylesheet.cssGET script.jsGET logo.png
  • 20. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHJSF - Implementierungen• 2 Implementierungen:– Oracle Mojarra (Referenzimplementierung)– Apache MyFaces Prinzipiell Austauschbar• Servlet-Container:– Implementierung typischerweise Teil der Anwendung Freie Wahl der Implementierung• Java EE - Application-Server: "Full-Stack-Falle"– Implementierung zwingend Teil des Auslieferumfangs– Dadurch Festlegung auf– Implementierung– Version– Änderung der JSF-Implementierung möglich• Konfiguration notwendig• Ggf. Auswirkung auf Garantie/Support20
  • 21. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHVergleich: MyFaces vs Mojarra21010020030040050060070080090010000 200 400 600 800 1000 1200 1400[ms]# of Components in Tree
  • 22. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHVergleich: MyFaces vs Mojarra22010020030040050060070080090010000 200 400 600 800 1000 1200 1400[ms]# of Components in Tree
  • 23. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHFazit Vergleichsstudie231. Größe des Komponentenbaum hat direkten Einfluss aufPerformance2. MyFaces durchläuft den Lifecycle schneller als Mojarra3. Anwendungen mit großen Komponentenbäumenprofitieren von einem Umstieg auf MyFaces bit.ly/myfaces-vs-mojarra
  • 24. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHGliederung• JSF Response Time– Kompontenbaum– Implementierungsunterschiede• Resource-Loading– Combined Resources– Caching– Ressourcen auslagern– Komprimierung24Browser Servlet-ContainerGET /index.jsfJSF-LifecycleRestoreViewRender ResponseGET stylesheet.cssGET script.jsGET logo.png
  • 25. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHJSF - Resource Handling• Organisation inWebContent/resources:• Rendering:• Deklaration:<h:head><h:outputStylesheetlibrary="css"name="styleB.css" /><h:outputScriptlibrary="js"name="scriptC.js"target="head" /></h:head>25<link rel="stylesheet"href="/myapp/javax.faces.resource/styleB.css.jsf?ln=css"><script src="/myapp/javax.faces.resource/scriptC.js.jsf?ln=js"></script>
  • 26. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHCombined Resources26
  • 27. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHCombined Resources: Anforderungen• UmsetzungsvariantenBuild-Prozess/Deployment• Maven• Ant• Jawr– JSF• Eigenimplementierung / Erweiterung• Bibliothek• Programmiermodell:– Ressourcen zur Entwicklungszeit nicht kombinieren Staging-Konzept berücksichtigen• Rendering:– Nur ein Verweis pro Typ– Gerenderte Links müssen kombinierte Ressource referenzieren27
  • 28. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHCombined Resources: Rendering28<link rel="stylesheet" href="/myapp/resources/packed.css"><script src="/myapp/resources/packed.js"></script><link rel="stylesheet"href="/myapp/javax.faces.resource/styleA.css.jsf?ln=css"><link rel="stylesheet"href="/myapp/javax.faces.resource/styleB.css.jsf?ln=css"><script src="/myapp/javax.faces.resource/scriptA.js.jsf?ln=js"></script><script src="/myapp/javax.faces.resource/scriptB.js.jsf?ln=js"></script><script src="/myapp/javax.faces.resource/jquery-1.9.1.min.js.jsf?ln=js"></script>
  • 29. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHJSF - Resource Handler• Verantwortlich fürDe/Encoding von Resourcen• Liefert Ressource anhandLibrary und Resourcename• Behandelt Resource Requests29
  • 30. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHOmniFaces - CombinedResourceHandlerfaces-config.xml:<application><resource-handler>org.omnifaces.resourcehandler.CombinedResourceHandler</resource-handler></application>30
  • 31. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHview1.xhtmlscriptA.js(<1kB)jQuery.js(~91 kB)scriptC.js(<1kB)Combined Resources: Problem31view2.xhtml
  • 32. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHCombined Resources: ProblemUngepackt:• Requests– 9 of 12– 3 from Cache– 97,1 kB transferred32
  • 33. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHCombined Resources : ProblemUngepackt:• Requests– 9 of12– 3 from Cache– 97,1 kB transferredGepackt:• Requests– 6 of 6– 0 from Cache– 186,9 kB transferred33
  • 34. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHCombined Resources : ProblemLösung:Caching - Strategie34
  • 35. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHCombined Resources – Ausnahmen35jQuery.jsa1.js a2.jsb1.js b2.jsview1.xhtml view2.xhtml[from Cache]
  • 36. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHOmniFaces - CombinedResourceHandlerAusschluß seitenweise konfigurieren:view.xhtml:<!-- Packed Ressources --><h:outputScript library="js" name="scriptB.js"target="head" /><h:outputScript library="js" name="scriptC.js"target="head" /><!-- Excluded from packing --><h:outputScript library="js" name="jquery-1.9.1.min.js"/>36
  • 37. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHOmniFaces: CombinedResourceHandlerAusschluß global konfigurieren:• web.xml:<context-param><param-name>org.omnifaces.COMBINED_RESOURCE_HANDLER_EXCLUDED_RESOURCES</param-name><param-value>javax.faces:jsf.js</param-value></context-param>37
  • 38. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHOmniFaces: CombinedResourceHandlerAuslieferung vollständig unterdrücken:• web.xml:<context-param><param-name>org.omnifaces.COMBINED_RESOURCE_HANDLER_SUPPRESSED_RESOURCES</param-name><param-value>primefaces:primefaces.css</param-value></context-param>38
  • 39. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHCombined Resources - Bibliotheken39ICEfaces 3.3"Resource Coalescing"RichFaces 4"Resource Optimization"Omnifaces"Combined ResourceHandler"
  • 40. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHGliederung• JSF Response Time– Kompontenbaum– Implementierungsunterschiede• Resource-Loading– Combined Resources– Caching– Ressourcen auslagern– Komprimierung40Browser Servlet-ContainerGET /index.jsfJSF-LifecycleRestoreViewRender ResponseGET stylesheet.cssGET script.jsGET logo.png
  • 41. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHStandardverhalten:Caching- Response Header• Production-Stage:HTTP/1.1 200 OKServer: Apache-Coyote/1.1Expires: Thu, 11 Apr 2013 13:51:12 GMTLast-Modified: Wed, 03 Apr 2013 08:52:01 GMTContent-Type: application/javascriptContent-Length: 176Date: Thu, 04 Apr 2013 13:51:12 GMT41
  • 42. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHExpires Header"The Expires entity-header field gives the date/time after which theresponse is considered stale."RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1• Wird von JSF automatisch gesetzt– Production-Stage: 7 Tage– Development-Stage: 0• Probleme:– Zu kurzer Zeitraum:• Ressource wird redundant ausgeliefert– Zu langer Zeitraum• Client verpasst Update42
  • 43. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHIdee:Expires: Fri, 01 Jan 2100 12:00:00 GMT• JSF Resourcehandling unterstützt Versionierung• Version mit jedem Deployment erhöhen• JSF verwendet standardmässig höchste Version• Angabe von niedriger Version möglich, aber…<h:outputScript library="js" name="1_0/scriptA.js" target="head" />– Mojarra: erlaubt– MyFaces:Warnung: Resource referenced by resourceName 1_0/scriptA.js andlibraryName js not found in call to ResourceHandler.createResource. Itwill be silenty ignored.43
  • 44. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHResponse Header anpassen• Servlet-Filter– geht immer, unabhängig von JSF– Nachteil: Kein Zugriff auf FacesContext, Scopes, etc…• JSF:44
  • 45. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHGliederung• JSF Response Time– Kompontenbaum– Implementierungsunterschiede• Resource-Loading– Combined Resources– Caching– Ressourcen auslagern– Komprimierung45Browser Servlet-ContainerGET /index.jsfJSF-LifecycleRestoreViewRender ResponseGET stylesheet.cssGET script.jsGET logo.png
  • 46. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHStatische Ressourcen auslagern46Apachehttpdhttp://www.oio.de http://static.oio.de
  • 47. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHCDN – Content Delivery Network47
  • 48. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHCDN - Vorteile• Transfer von statischen Ressourcen– schont• Application Server• Unternehmensnetzwerk– Erzeugt (vermutlich) geringere Kostenab 0,12 $ / GB undBeispiel $0,0090 / 10.000 Requests• CDN übernimmt– Auslieferung– Load-Balancing– Skalierung48
  • 49. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHJSF und CDN• Deployment– Extra-Step• Maven• Ant• …• JSF49<link rel="stylesheet"href="/myapp/javax.faces.resource/styleA.css.jsf?ln=css"><link rel="stylesheet" href="http://mycdn.com/oio/myapp/styleA.css">
  • 50. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHJSF Resource Handler50
  • 51. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHOmniFaces: CDNResourceHandler• faces-config.xml:<application><resource-handler>org.omnifaces.resourcehandler.CDNResourceHandler</resource-handler></application>• web.xml:<context-param><param-name>org.omnifaces.CDN_RESOURCE_HANDLER_URLS</param-name><param-value>js:jquery.js=http://code.jquery.com/jquery.js</param-value></context-param>51
  • 52. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHOmniFaces: CDNResourceHandler52from CDNPacked
  • 53. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHCDN und Caching• Response Header:Access-Control-Allow-Origin:*Content-Encoding:gzipContent-Length:32819Content-Type:application/x-javascript; charset=utf-8Date:Fri, 05 Apr 2013 14:02:24 GMTCache-Control:max-age=2592000Expires:Sun, 05 May 2013 14:02:24 GMTLast-Modified:Tue, 05 Feb 2013 00:56:40 GMTVary:Accept-EncodingX-Cache:HITServer:ECS (fcn/41B6)53
  • 54. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHGliederung• JSF Response Time– Kompontenbaum– Implementierungsunterschiede• Resource-Loading– Combined Resources– Caching– Ressourcen auslagern– Komprimierung54Browser Servlet-ContainerGET /index.jsfJSF-LifecycleRestoreViewRender ResponseGET stylesheet.cssGET script.jsGET logo.png
  • 55. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHKonfiguration - Tomcat• Server.xml<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"compression="on"compressionMinSize="1024"compressableMimeType="text/css,application/javascript"/>55
  • 56. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHZusammenfassung• JSF Response Time– Kompontenbaum– Implementierungsunterschiede• Resource-Loading– Combined Resources– Caching– Ressourcen auslagern– Komprimierung56Browser Servlet-ContainerGET /index.jsfJSF-LifecycleRestoreViewRender ResponseGET stylesheet.cssGET script.jsGET logo.png
  • 57. Nie mehr weltweites warten – JSF Performance-Tuning© 2013 Orientation in Objects GmbHFazit• Einfluss auf JSF-Performance:– Größe des Komponentenbaumes– Wahl der Implementierung• # Requests statischer Resourcen verringern:– Combined Resources– Resource Caching– Auslagern (CDN / dedicated Webserver)• Netzwerk-Latenz verringern:– GZip Kompression nutzen• Der Browser kann das schon lange … Alle vorgestellten Massnahmen lassen sich mit JSF umsetzen• Es existieren außerdem hilfreiche Bibliotheken57
  • 58. Orientation in Objects GmbHWeinheimer Str. 6868309 Mannheimwww.oio.deinfo@oio.de? ????Fragen ?
  • 59. Orientation in Objects GmbHWeinheimer Str. 6868309 Mannheimwww.oio.deinfo@oio.deVielen Dank für ihreAufmerksamkeit !