XPages Performance

Click here to load reader

Embed Size (px)

description

Slides from session at EntwicklerCamp 2013 ( 13-MAR-2013 )

Transcript of XPages Performance

  • 1. Entwicklercamp 2013Full Speed XPagesPerformanceoptimierung11. 13..03.2013Maritim Hotel, GelsenkirchenUlrich Krause, BCC Unternehmensberatung GmbH

2. ber: Ulrich Krause Lotus Notes / Domino Administrator & Entwickler seit 1993 Senior Software Architect OpenNTF Contributor OpenNTF Board of Directors IBM Champion 2011/2012/2013 Blog http://www.eknori.de Notes Forum (http://www.atnotes.de) 3. Agenda Performance, was kann bremsen ? Java vs. JavaScript Daten vorbereiten, ViewNavigator vs. GetNextDocument Stringbuilder vs. Concat (+) JSF Lifecycle Listener Partial Update / Partial Execute Variable Resolver Werkzeuge 4. XPages Request 5. Hardware Die verwendete Hardware hat einen nicht unerheblichen Einfluauf die Performance. Es gibt 3 Kernelemente CPU Arbeitsspeicher Festplatten 6. Hardware CPU Anzahl Kerne / Taktrate / Cache Schlechte Antwortzeiten Arbeitsspeicher Obergrenze durch das Betriebssystem vorgegeben Skalierbarkeit Schwache CPU und zu kleiner Arbeitsspeicher fhren zu Schlechter Gesamtperformance Schlechten Antwortzeiten Server hngt 7. Netzwerk Bandbreite Geschwindigkeit, mit der Daten bertragen werden Latenz Beanspruchte Zeit einer Datenbertragung zwischen mehreren Computer an einem Netzwerk Je grer die Bandbreite und je kleiner die Latenz desto "besser"ist die Verbindung 8. Client & Browser Hardware Wie viele Daten requests / responses werden bertragen Wie viele Daten werden bertragen ( Gre ) Wie werden Resourcen gecached Wie viel CSJS wird ausgefhrt Gre / Komplexitt des CSS Komplexitt des Seitenaufbau 9. XPages Design Optimizations Berechnungen whrend der JSF Lifecycle Phasen reduzieren Wenn mglich, partial update verwenden Wenn mglich, partial execute verwenden Wenn mglich, disableValidators & immediate verwenden Berechnungen fr Sichtbar reduzieren Loaded Eigenschaft verwenden um Rendered zu berechnen Ergebnis der Berechnung zwischenspeichern ( scopedVariable) VariableResolver verwenden Repeats & Views viewEntry.getColumnValue antelle von viewEntry.getDocument.getColumn View data source dataCache property 10. Performancebeeintrchtigungen Browser / HTTP Server Netzwerk: Latenz, Bandbreite, Dateigre Browser: Anzahl gleichzeitiger Downloads (IE7 = 2 , IE8 = 6 ) HTTP Server / App Server HTTP Server JVM Memory Allocation (heap size) & Garbage Collector CPU Time Anzahl Threads, DEFAULT: 40 , konfigurierbar in Domino Administrator App Server / Domino context Lesen von Designelementen (Xpage, .class files, jar files, etc) Je mehr Design Elemente, desto mehr Netzwerkanfragen Anzahl Backend API Calls, insbesondere bei groen Datenmengen 11. Performancebeeintrchtigungen Servlet / JSF Lifecycle Persitence mode Zugriffe auf das Dateisystem Serialisierung von Anfragen ( multiple partial update ) Neuberechnung von Werten in allen Phasen des JSF Lifecycle Browser/ Client JavaScript/ Dojo Inline JavaScript verhindert die Ausfhrung von weiteren HTML AJAX requests an Dojo Module, die nicht geladen sind 12. General Performance options notes.ini HTTPJVMMaxHeapSizeSet=1 HTTPJVMMaxHeapSize=256M sollte auf des verfgbaren RAM gesetzt werden Domino Administrator HTTP server "Enable logging to" disabled HTTP server thread count defaults to 40 Generell hat das Debug Einflu auf die Performance JavaEnableDebug=1 JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=800 0 JavascriptEnableDebug=1 ( ab Version 9 ) 13. Reducing Memory Utilization xsp.persistence.mode= Defines the persistence mode for the JSF pages file: All the pages are persisted on disk fileex: All the pages are persisted on disk except the current one, which stays in memory : All the pages stay in memory (tree mode) 14. XPages Design Optimizations Loadtime vs Runtime Loaded vs Rendered ExtLib Dynamic Content allows partial re-loading so more use of load-time optimizations CSS & browser JS Kein inline CSS / JS Auslagern in entsprechende Designelemente Dateien so klein wie mglich halten Bilder Gre nicht zur Laufzeit berechnen CSS Image Sprites verwenden, wenn mglich 15. JavaScript/CSS Aggregation Fat mehrere DOJO Module, CSS / JS files in einer einzigen Dateizusammen Weniger Anfragen vom Browser an den Server Wirkt sich in Netzwerken mit hoher Latenz Performance steigernd aus Performanteres Parsen von CSS / JS Weniger Verbindungen zum Server Auf dem Server: xsp.properties: xsp.resources.aggregate=true 16. JavaScript/CSS Aggregation 17. XPages Pre-Load XPagesPreload=1 Neues Feature in Notes / Domino 8.5.3 Server und Client Java classes from the XPages runtime plug-ins loaded from a fixed list of runtime classes ( 435 in ND 8.5.3 ) com.ibm.xsp.core, common utility, JS wrapper, FSF runtime classes Java classes referenced in *-faces.config.xml XPages control renderer, data sources, complex types 18. XPages Pre-Load XPagesPreloadDB=Server!!Db.nsf/XPage.xsp, myLocalDb.nsf Arbeitet auf Applikationsebene Die Anwendung wird beim Client/Serverstart in den Speicher geladen. Dies passiert auch, wenn die Anwendung erstmalig im Browser geffnet wird Fr jeden Eintrag in der notes.ini Variable wird eine XPage URL generiert und an den Server geschickt Die Anwendung wird geladen und das HTML generiert Die XPages Runtime verwirft das HTML, behlt aber die Anwendung im Speicher 19. Scoped Variables applicationScope Are visible for all users of one application. Expires some time after the last userused an applicationScope variable.That means applicationScope variables are NOT persistent forever. sessionScope Is valid through the session of the current user. A user session expires aftersome time of inactivity. Uses dont have access to the sessionScope variables ofother users. viewScope Is visible for views on the current page only. Useful for transporting a searchquery to a view. requestScope Is valid through one request of the current user. That includes refreshing of apage. 20. Caching und Application Scope 21. JAVA Design Element (8.5.3) A Java design element is created just like you create any otherdesign element. Categorization in the Designer views is shown by using the "/"character to demark levels In the virtual file system, the class file appears separate fromthe .java file, under WebContentWEB-INFclasses 22. JAR Design Element ( V9 ) Work with packaged Java code/libraries that are included in theapplication NSF Frees you from having to deploy the JARS to a server and/orinclude the source files uniquely in the application database Automatically manages the classpath and places the JAR file intoweb-inf/lib Only available to XPagesapplications automatically loaded by the XPages runtime 23. When to Execute - # vs $ # Wird jedes Mal ausgefhrt, wenn die Seite gerendert wird Wenn Werte sich ndern. (Computed values / Abhngigkeiten ) $ Wird nur beim ersten Seitenaufbau ausgefhrt. Wenn sich Werte nicht ndern ( Label ) 24. DataContext dataContexts can be thought of as global variables dataContexts value can be computed dynamically or on pageload So you can use ${javascript:@Today()} and run it once rather than running a function each time. dataContexts can be scoped to any level that datasources can XPage, Custom Control or Panel you can set a dataContext in a panel in a repeat control, to avoid multiple references to a NotesDocuments item dataContexts are referenced using EL So at no point in the references do you run SSJS, so its not having to go through the SSJS parser 25. DataContext - Pitfall Problem beim data context und dynamischen binding They will be recomputed again and again, even when in Partial Execution mode and if they are not in use (http://hasselba.ch/blog/?p=1112) 26. DataContext - Pitfall 27. JSF Lifecycle 28. XPages Masterclasshttp://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=XPages%20Masterclass 29. XPages Lifecycle Listener Was passiert in den einzelnen Phasen des JSF Lifecycle Ulrich Krause: http://openntf.org/XSnippets.nsf/snippet.xsp?id=a-simple-lifecyclelistener- 30. Partial Refresh / Update (Pro) Reduzierung der Berechnungen im renderResponse Weniger Rechenaufwand auf dem Server Kleinere Datenmengen, die vom Server bertragen werden Reduzierung der Datenmenge im Netzwerk Bessere User / Browser experience Whrend der Aktualisierung bleibt die Seite weiterhin sichtbar Das Aktualisieren von nur kleinen Bereichen einer Webseite ist schneller als der vollstndige Neuaufbau 31. Partial Refresh / Update (Contra) Abhngigkeiten ausserhalb der refreshID Bereiche, die eine Abhngigkeit zu dem neu berechneten Bereich haben, werden nicht aktualisiert Vorsicht, wenn das partial Update fr Bereiche aktiviert wird, die bisher vollstndig aktualisiert wurden Es kann nur eine refreshID angegeben werden Diesem Restriktion kann mit CSJS umgangen werden, allerdings werden die einzelnen Aktualisierungen seriell abgearbeitethttp://www.timtripcony.com/blog.nsf/d6plinks/TTRY-84B6VP 32. Partial Execution Reduced control processing in the 3 data-processing phases Means less work on the server, faster response times Dependancy on Edit Box values outside of the exec area Submitted values from Edit Boxes and/or other input controls in other areas of the control tree are not processed, so any control values and document fields in those other areas will not be updated. Enabling Partial Exec where it was previously full execution may lead to functional problems where values are out-of date in the onclick script or in the redisplayed page. onclick Event Handler must be in the exec area The applyRequestValues phase prepares for the invokeApplication phase.The onclick simple action or SSJS script wont occur if outside the partial exec area 33. Partial Execution execMode erst ab 8.5.1 Setzen der execId in V8.5.1 und V9 34. disableValidators / immediate disableValidators JSF Lifecycle durchluft alle Phasen (1-6) es findet aber keine Validierung der Daten statt Conver