65
Social Collaboration 39: "Vernetzte Informationswelt" www.dnug.de XPages: Performance-Optimierung Heinz Ulrich Krause BCC Unternehmensberatung GmbH http://www.bcc.biz

XPages: Performance-Optimierung - Ulrich Krause (eknori) SNoUG 2013

Embed Size (px)

Citation preview

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

Typischer XPages Request

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

JavaScript/CSS Aggregation

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

Application Scope aktualisieren

Social Collaboration 39: "Vernetzte Informationswelt“

www.dnug.de

JSF Lifecycle

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

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

Heapdump / Javadump Analyzer

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

Optimierung – Schritt für Schritt

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

Step1: Messergebnis

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

Step2: Messergebnis

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 3: Messergebnis

Social Collaboration 39: "Vernetzte Informationswelt“

www.dnug.de

Step 4: Erzeugung des JSON in einer Ansicht

Social Collaboration 39: "Vernetzte Informationswelt“

www.dnug.de

Step 4: Messergebnis

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 5: Messergebnis

Social Collaboration 39: "Vernetzte Informationswelt“

www.dnug.de

Step 6: Warum nicht gleich in Java …

Social Collaboration 39: "Vernetzte Informationswelt“

www.dnug.de

Step 6: Messergebnis

Social Collaboration 39: "Vernetzte Informationswelt“

www.dnug.de

Feedback gern auch per Email

[email protected]

Fragen?

Social Collaboration 39: "Vernetzte Informationswelt“

www.dnug.de

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

Social Collaboration 39: "Vernetzte Informationswelt“

www.dnug.de

• Global Application / Configuration properties