XPages: Performance-Optimierung - Ulrich Krause (eknori) SNoUG 2013
-
Upload
bcc-solutions-for-ibm-collaboration-software -
Category
Technology
-
view
1.304 -
download
0
Transcript of XPages: Performance-Optimierung - Ulrich Krause (eknori) SNoUG 2013
Social Collaboration 39: "Vernetzte Informationswelt"
www.dnug.de
XPages: Performance-Optimierung
Heinz Ulrich Krause
BCC Unternehmensberatung GmbH
http://www.bcc.biz
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Administrator /Developer seit 1993 • Senior Software Architect bei BCC
• OpenNTF Contributor • IBM Champion 2011/2012/2013
• Blog http://www.eknori.de • Notes Forum (http://www.atnotes.de)
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Was kann die Performance beeinflussen ?
• Java oder JavaScript ?
• ViewNavigator oder GetNextDocument
• Stringbuilder oder Concat (+)
• JSF Lifecycle Listener
• Partial Update / Partial Execute
• Variable Resolver
• Tools
Agenda
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Die Hardware hat einen nicht unerheblichen Einfluß auf die Performance. Es gibt 3 Kernelemente – CPU
– Arbeitsspeicher
– Festplatten
Hardware
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• CPU – Anzahl Kerne / Taktrate / Cache – Schlechte Antwortzeiten
• Arbeitsspeicher
– Obergrenze durch das Betriebssystem vorgegeben – Skalierbarkeit
• Schwache CPU und zu kleiner
Arbeitsspeicher führen zu – Schlechter Gesamtperformance – Schlechten Antwortzeiten – Server “hängt”
Hardware
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Bandbreite – Geschwindigkeit, mit der Daten übertragen werden
• Latenz – Beanspruchte Zeit einer Datenübertragung zwischen mehreren
Computer an einem Netzwerk
• Je größer die Bandbreite und je kleiner die Latenz desto "besser" ist die Verbindung
Netzwerk
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Hardware
• Wie viele Daten (Requests / Responses) werden übertragen
• Wie viele Daten werden übertragen (Größe)
• Wie werden Resourcen gecached
• Wie viel CSJS wird ausgeführt
• Größe / Komplexität des CSS
• Komplexität des Seitenaufbau
Client & Browser
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Browser / HTTP Server – Netzwerk: Latenz, Bandbreite, Dateigröße – 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 großen Datenmengen
Performancebeeinträchtigungen
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• 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 Ausführung von weiteren HTML
– AJAX requests an Dojo Module, die nicht geladen sind
Performancebeeinträchtigungen
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• notes.ini – HTTPJVMMaxHeapSizeSet=1 – HTTPJVMMaxHeapSize=256M
• sollte auf ¼ des verfügbaren RAM gesetzt werden
• Domino Administrator – HTTP server "Enable logging to" abschalten, wenn nicht benötigt – HTTP server thread count – defaults to 40
• Debugging abschalten – JavaEnableDebug=1 – JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000 – JavascriptEnableDebug=1 ( ab Version 9 )
Allgemeine Massnahmen zur Performancesteigerung
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• xsp.persistence.mode= – Defines the persistence mode for the JSF pages
• file: Alle Seiten werden auf die Festplatte geschrieben
• fileex: Alle Seiten werden auf die Festplatte geschrieben; nur die aktuelle Seite befindet sich im Arbeitsspeicher
• <else>: Alle Seiten werden im Arbeitsspeicher gehalten
Nutzung des Arbeitsspeichers optimieren
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• „Simple Actions“ verwenden. Keine Buttons oder Links mit umfangreichem JS
• Reduzierung der Berechnungen im Lifecycle • partial update / partial refresh • partial execute • disableValidators & immediate event
• Reduzierung der Berechnungen zur dynamischen Anzeige von Elementen ( rendered / loaded )
• Variable Resolver verwenden
• Repeat Control & Views • viewEntry.getColumnValue statt viewEntry.getDocument.getColumn • Domino View data source dataCache property wenn möglich
XPages Design Optimierung
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• # – Wird jedes Mal ausgeführt, wenn die Seite aufgebaut wird
• Wenn Werte sich ändern. (Computed values / Abhängigkeiten )
• $ – Wird nur beim ersten Seitenaufbau ausgeführt.
• Wenn sich Werte nicht ändern ( Label )
“Laden” oder “Anzeigen”
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Faßt mehrere DOJO Module, CSS / JS files in einer einzigen Datei zusammen • 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
JavaScript/CSS Aggregation
Aufd dem Server: xsp.properties: xsp.resources.aggregate=true
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• 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
XPages PreLoad
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• XPagesPreloadDB=Server!!Db.nsf/XPage.xsp, myDb.nsf – Arbeitet auf Applikationsebene
– Die Anwendung wird beim Client/Serverstart in den Speicher geladen. Dies passiert auch, wenn die Anwendung erstmalig im Browser geöffnet wird
– Für 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, behält aber die Anwendung im
Speicher
XPages PreLoad
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• applicationScope – Für ALLE User einer Anwendung.
– Werden verworfen, wenn der letzte User die Anwendung geschlossen hat.
– allgemeine Anwendungskonfiguration
• sessionScope – Für EINEN User während der Session dieses Users.
– Wird nach einer bestimmten Zeit verworfen.
– Kein Zugriff auf die Inhalte eines anderen Users
– User bezogene Anwendungskonfiguration ( Sprache / Theme )
Scoped Variables
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• viewScope – Nur auf der aktuell angezeigten Seite verfügbar
– Inhalt wird beim Wechsel zu einer anderen Seite verworfen
– Übertragung von Daten zwischen Elementen der Seite
• requestScope – Verfügbar nur während einer einzelnen Aktion.
– Umfasst auch die Aktualisierung der Seite.
Scoped Variables (cont.)
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Was passiert in den einzelnen Phasen?
XPages Lifecycle Listener
Ulrich Krause: http://openntf.org/XSnippets.nsf/snippet.xsp?id=a-simple-lifecyclelistener-
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
XPages Masterclass
http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=XPages%20Masterclass
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Kann als globale Variable bezeichnet werden
• Kann dynamisch beim Laden einer Seite berechnet werden – Beispiel: ${javascript:@Today()}
• Kann an beliebige Elemente einer Seite gebunden werden – XPage, Custom Control or Panel
• Kann über Expression Language referenziert werden – At no point in the references do you run SSJS
– Not having to go through the SSJS parser
DataContext
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Niemals dynamisch berechnen !!. – Die Berechnung erfolgt mehrfach, auch bei einem partial refresh
DataContext – ACHTUNG !!!!
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• 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 – Während der Aktualisierung bleibt die Seite weiterhin sichtbar
– Das Aktualisieren von nur kleinen Bereichen einer Webseite ist schneller als der vollständige Neuaufbau
Partial Refresh / Update (Pro)
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Abhängigkeiten ausserhalb der refreshID – Bereiche, die eine Abhängigkeit zu dem neu berechneten Bereich
haben, werden nicht aktualisiert
– Vorsicht, wenn das partial Update für Bereiche aktiviert wird, die bisher vollständig aktualisiert wurden
• Es kann nur eine refreshID angegeben werden – Diesem Restriktion kann mit CSJS umgangen werden, allerdings werden
die einzelnen Aktualisierungen seriell abgearbeitet
Partial Refresh / Update (Cons)
http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-84B6VP
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Mehrere Aktualisierungen – http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-84B6VP
Partial Refresh / Update (Cons)
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Reduziert den Rechenaufwand in den 3 “data-processing” Phasen – Weniger Arbeit für den Server, bessere Antwortzeiten
• Abhängigkeiten ausserhalb der exec area
– Werte, die sich in Feldern ausserhalb der exec area liegen, werden nicht berücksichtigt.
– Keine Aktualisierung dieser Werte und keine Aktualisierung von Dokumenten
– 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.
Partial Execution
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• onclick Event Handler muss sich in der exec area befinden – The ApplyRequestValues phase prepares for the invokeApplication
phase.
– The onclick simple action or SSJS script won't occur if outside the partial exec area
Partial Execution (cont.)
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• execMode neu ab 8.5.1
• Setzen der execId in V8.5.1 und V9
Partial Execution
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• disableValidators – JSF Lifecycle durchläuft alle Phasen (1-6) – Keine Validierung der Daten – Converters funktionieren weiterhin. – Werte in Dokumenten werden aktualisiert
• Sven Hasselbach – “Disable all validators at once” (http://hasselba.ch/blog/?p=1106)
• Immediate – JSF Lifecycle durchläuft nur Phasen (1, 2, 6) – Keine Datenverarbeitung – Werte in Dokumenten werden nicht aktualisiert – Event Handler onclick scripts und renderResponse Berechnungen werden
ausgeführt
disableValidators / immediate
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Most properties, like CSS “style” are only computed in the RenderResponse phase
• Edit Box and input “value” properties are used in Data Processing phases and RenderResponse phase
• Data Source properties are computed during RenderResponse – Results are cached for the next request's Data Processing and
InvokeApplication phases
Minimize work in rendered/ visible computation
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• “Rendered” wird in allen Phasen des Lifecycle neu berechnet.
• Nicht in jeder Eigenschaft neu berechnen – @DbLookup, @DbColumn, getDocumentByKey
– Neuberechnung über viewScope steuern
Minimize work in rendered / visible computation
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Richtigen Bildtypen verwenden – JPEG für komplexe und detaillierte Darstellungen
– PNG/GIF für Schaltflächen, Tranzparenz • HTML <img> tag “width” und “height” Attribute verwenden
• Richtige Größe verwenden – Keine Anpassung der Größe zur Laufzeit über HTML <img> tag “width”
und “height” Attribute
– Bilder, die grösser sind, als benötigt, benötigen mehr Bandbreite
Bilder
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• CSS Image Sprites verwenden – viele kleine Bilder in einem einzigen Image zusammenfassen
– CSS erstellen, um nur den benötigten Teil des Image Sprites anzuzeigen
– Image Sprites unterstützen das “alt” Attribut nicht. Daher das “title” Attribut verwenden bei barrierefreier Programmierung
– Online Tools zur Erstellung von Sprites – http://spritegen.website-performance.org/
Image Sprites
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
Image Sprites
http://www.w3schools.com/css/tryit.asp?filename=trycss_sprites_img
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• XPages Anwendung – Funktioniert auf dem Server und dem Client – NSF muss auf dem Server/ Notes Client installiert werden – profiler.jar file in den JVM Start Parametern eintragen
• Misst CPU und Speicherauslastung • OpenNTF.org Projekt
– Kostenlos und Open Source – http://www.openntf.org/internal/home.nsf/project.xsp?action=openDo
cument&name=XPages%20Toolbox
• Backend Classes Profiling in 8.5.2 hinzugefügt
Performance Messen: XPages Toolbox
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
Performance Messen: XPages Toolbox
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Erzeugen eines Heap Dump der JVM – Über einen Button im XPages Profiler
– Über die Domino Console • tell http xsp heapdump (triggers com.ibm.jvm.Dump.HeapDump())
• tell http xsp javadump (triggers com.ibm.jvm.Dump.JavaDump())
• Analysieren des Dumps mit Eclipse Memory Analyzer – http://www.eclipse.org/mat/
– http://www.ibm.com/developerworks/java/jdk/tools/dtfj.html
Performance Messen: XPages Toolbox
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Print statements – In rendered/visible computations to see how often executed
• print("panel2 evaluating rendered property");
– In the XPages root control events: • before/afterPageLoad, afterRestoreView, before/afterRenderResponse.
– Custom control root events: • before/afterPageLoad.
– In the document data source events: • queryNewDocument, postSaveDocument, etc.
• Task Manager and/or Process Explorer – Shows CPU usage & process memory usage as it happens
Performance Messen: Weitere Möglichkeiten
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Browser developer tools – for watching network transactions, partial updates, response times
– BROWSER: Firebug, Developer Tools
– XPiNC: FirebugLite from ExtLib
• Java / Javascript Debugging – Degrades performance but can inspect objectsUse the Eclipse Java
debugger.
– In Domino\notes.ini add these 2 options: • JavaEnableDebug=1
• JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000
Performance Messen: Weitere Möglichkeiten
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Erzeugen einer NotesDocumentCollection
• Erzeugen eines JSON Strings aus den Werten in den Dokumenten der Collection
Step1: Original Code aus Beispieldatenbank
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Wie Step1, aber die UNID wird beim Speichern des Dokument in einem item gespeichert
Step 2: UNID aus Item lesen
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Statt die Werte einzeln aus den Items zu lesen, wird der komplette JSON String in einem einzelnen Item im Dokument gespeichert
Step3: JSON im Dokument erzeugen
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
Step 4: Erzeugung des JSON in einer Ansicht
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Concatenation of Strings is very easy in Java - all you need is a '+‘
• Each time you append something via '+' (String.concat()) a new String is created, the old stuff is copied, the new stuff is appended, and the old String is thrown away. The bigger the String gets the longer it takes - there is more to copy and more garbage is produced.
• Accordingly to Arno Unkrig the optimal strategy is to use String.concat() for 2 or 3 operands, and StringBuilder for 4 or more operands
StringBuilder vs String.concat
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• When to use StringBuilder over '+' (String.concat()) ? – use StringBuilder whenever you assemble a String in a loop
– Keep in mind that '+' isn't always a good idea
StringBuilder vs String.concat
http://kaioa.com/node/59
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Verwenden des Stringbuilders zum Zusammenbau des JSON
Step 5: StringBuilder
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
Step 6: Warum nicht gleich in Java …
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
Feedback gern auch per Email
Fragen?
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Single document containing references to all your CSS resources – resource sections reference the CSS files
– control section define what CSS classes are applied to specific controls
• XML based and easy To learn – creating a new theme document prefills sample content
• Can extend other themes – <theme extends="webstandard">
– will automatically include all the resource and control definitions from that theme
Themes
Social Collaboration 39: "Vernetzte Informationswelt“
www.dnug.de
• Create your own themes from scratch. – Extending an existing theme will include extra stylesheets and styles
that you might not need.
• Be prepared to spend more time writing css though