Xpages Anwendungen lassen sich recht leicht per Drag & Drop und ein wenig Code erstellen. In den meisten Fällen reicht dies auch aus, wenn es um die Arbeit mit wenig Datensätzen geht und die Anwendung selber nicht sonderlich kompliziert ist. Dringt man aber tiefer in die Programmierung ein, so wird man nicht selten mit Performanceproblemen konfrontiert.
Die Session zeigt auf, wo in einer Anwendung ( und auch ausserhalb ) die Performancefresser stecken und wie man diesen auf die Schliche kommt. Die Installation des OpenNTF Xpages Toolkit und die Anwendung der Toolbox werden an einem praktischen Beispiel erläutert. Dabei wird aus einer anfänglich nicht performanten Anwendung Schritt für Schritt eine performante Applikation.
Agenda:
Performance, was kann bremsen ?
Java vs. JavaScript
Daten vorbereiten, ViewNavigator vs. GetNextDocument
Stringbuilder vs. Concat
Phase Listener
Partial Refresh / Partial Execute
Variable resolver
5. Social Collaboration 39: "Vernetzte Informationswelt“
Hardware
• Die Hardware hat einen nicht unerheblichen Einfluß
auf die Performance. Es gibt 3 Kernelemente
– CPU
– Arbeitsspeicher
– Festplatten
www.dnug.de
6. Social Collaboration 39: "Vernetzte Informationswelt“
Hardware
• 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”
www.dnug.de
7. Social Collaboration 39: "Vernetzte Informationswelt“
Netzwerk
• 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
www.dnug.de
8. Social Collaboration 39: "Vernetzte Informationswelt“
Client & Browser
• 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
www.dnug.de
9. Social Collaboration 39: "Vernetzte Informationswelt“
Performancebeeinträchtigungen
• 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
www.dnug.de
10. Social Collaboration 39: "Vernetzte Informationswelt“
Performancebeeinträchtigungen
• 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
www.dnug.de
11. Social Collaboration 39: "Vernetzte Informationswelt“
Allgemeine Massnahmen zur Performancesteigerung
• 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 )
www.dnug.de
12. Social Collaboration 39: "Vernetzte Informationswelt“
Nutzung des Arbeitsspeichers optimieren
• 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
www.dnug.de
13. Social Collaboration 39: "Vernetzte Informationswelt“
XPages Design Optimierung
• „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
www.dnug.de
14. Social Collaboration 39: "Vernetzte Informationswelt“
“Laden” oder “Anzeigen”
• #
– 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 )
www.dnug.de
15. Social Collaboration 39: "Vernetzte Informationswelt“
JavaScript/CSS Aggregation
• 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
Aufd dem Server: xsp.properties:
xsp.resources.aggregate=true
www.dnug.de
17. Social Collaboration 39: "Vernetzte Informationswelt“
XPages PreLoad
• 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
www.dnug.de
18. Social Collaboration 39: "Vernetzte Informationswelt“
XPages PreLoad
• 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
www.dnug.de
19. Social Collaboration 39: "Vernetzte Informationswelt“
Scoped Variables
• 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 )
www.dnug.de
20. Social Collaboration 39: "Vernetzte Informationswelt“
Scoped Variables (cont.)
• 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.
www.dnug.de
21. Social Collaboration 39: "Vernetzte Informationswelt“
Application Scope aktualisieren
www.dnug.de
23. Social Collaboration 39: "Vernetzte Informationswelt“
XPages Lifecycle Listener
• Was passiert in den einzelnen Phasen?
Ulrich Krause: http://openntf.org/XSnippets.nsf/snippet.xsp?id=a-simple-lifecyclelistenerwww.dnug.de
24. Social Collaboration 39: "Vernetzte Informationswelt“
XPages Masterclass
http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=XPages%20Masterclass
www.dnug.de
25. Social Collaboration 39: "Vernetzte Informationswelt“
DataContext
• 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
www.dnug.de
26. Social Collaboration 39: "Vernetzte Informationswelt“
DataContext – ACHTUNG !!!!
• Niemals dynamisch berechnen !!.
– Die Berechnung erfolgt mehrfach, auch bei einem partial refresh
www.dnug.de
28. Social Collaboration 39: "Vernetzte Informationswelt“
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
– Während der Aktualisierung bleibt die Seite weiterhin sichtbar
– Das Aktualisieren von nur kleinen Bereichen einer Webseite ist
schneller als der vollständige Neuaufbau
www.dnug.de
29. Social Collaboration 39: "Vernetzte Informationswelt“
Partial Refresh / Update (Cons)
• 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
www.dnug.de
http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-84B6VP
30. Social Collaboration 39: "Vernetzte Informationswelt“
Partial Refresh / Update (Cons)
• Mehrere Aktualisierungen
– http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-84B6VP
www.dnug.de
31. Social Collaboration 39: "Vernetzte Informationswelt“
Partial Execution
• Reduziert den Rechenaufwand in den 3 “dataprocessing” 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.
www.dnug.de
32. Social Collaboration 39: "Vernetzte Informationswelt“
Partial Execution (cont.)
• 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
www.dnug.de
33. Social Collaboration 39: "Vernetzte Informationswelt“
Partial Execution
• execMode neu ab 8.5.1
• Setzen der execId in V8.5.1 und V9
www.dnug.de
34. Social Collaboration 39: "Vernetzte Informationswelt“
disableValidators / immediate
• 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
www.dnug.de
35. Social Collaboration 39: "Vernetzte Informationswelt“
Minimize work in rendered/ visible computation
• 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
www.dnug.de
36. Social Collaboration 39: "Vernetzte Informationswelt“
Minimize work in rendered / visible computation
• “Rendered” wird in allen Phasen des Lifecycle neu
berechnet.
• Nicht in jeder Eigenschaft neu berechnen
– @DbLookup, @DbColumn, getDocumentByKey
– Neuberechnung über viewScope steuern
www.dnug.de
37. Social Collaboration 39: "Vernetzte Informationswelt“
Bilder
• 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
www.dnug.de
38. Social Collaboration 39: "Vernetzte Informationswelt“
Image Sprites
• 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/
www.dnug.de
39. Social Collaboration 39: "Vernetzte Informationswelt“
Image Sprites
http://www.w3schools.com/css/tryit.asp?filename=trycss_sprites_img
www.dnug.de
40. Social Collaboration 39: "Vernetzte Informationswelt“
Performance Messen: XPages Toolbox
• 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
www.dnug.de
44. Social Collaboration 39: "Vernetzte Informationswelt“
Performance Messen: Weitere Möglichkeiten
• 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
www.dnug.de
45. Social Collaboration 39: "Vernetzte Informationswelt“
Performance Messen: Weitere Möglichkeiten
• 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 Dominonotes.ini add these 2 options:
• JavaEnableDebug=1
• JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000
www.dnug.de
46. Social Collaboration 39: "Vernetzte Informationswelt“
Optimierung – Schritt für Schritt
www.dnug.de
47. Social Collaboration 39: "Vernetzte Informationswelt“
Step1: Original Code aus Beispieldatenbank
• Erzeugen einer NotesDocumentCollection
• Erzeugen eines JSON Strings aus den Werten in den
Dokumenten der Collection
www.dnug.de
49. Social Collaboration 39: "Vernetzte Informationswelt“
Step 2: UNID aus Item lesen
• Wie Step1, aber die UNID wird beim Speichern des
Dokument in einem item gespeichert
www.dnug.de
51. Social Collaboration 39: "Vernetzte Informationswelt“
Step3: JSON im Dokument erzeugen
• Statt die Werte einzeln aus den Items zu lesen, wird
der komplette JSON String in einem einzelnen Item
im Dokument gespeichert
www.dnug.de
55. Social Collaboration 39: "Vernetzte Informationswelt“
StringBuilder vs String.concat
• 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
www.dnug.de
56. Social Collaboration 39: "Vernetzte Informationswelt“
StringBuilder vs String.concat
• 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
http://kaioa.com/node/59
www.dnug.de
57. Social Collaboration 39: "Vernetzte Informationswelt“
Step 5: StringBuilder
• Verwenden des Stringbuilders zum Zusammenbau des
JSON
www.dnug.de
63. Social Collaboration 39: "Vernetzte Informationswelt“
Themes
• 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
www.dnug.de
64. Social Collaboration 39: "Vernetzte Informationswelt“
• 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
www.dnug.de
65. Social Collaboration 39: "Vernetzte Informationswelt“
• Global Application / Configuration properties
www.dnug.de