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

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

on

  • 997 views

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 ...

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

Statistics

Views

Total Views
997
Views on SlideShare
973
Embed Views
24

Actions

Likes
1
Downloads
3
Comments
0

8 Embeds 24

http://sametime.bcc.biz 9
http://www.bcc.biz 7
http://www.notesdev.de 2
http://www.bcc-online.de 2
http://www.bcc-unternehmensberatung.de 1
http://clientdjinn.com 1
http://www.inform.de 1
http://www.icodex.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

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

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

  • Social Collaboration 39: "Vernetzte Informationswelt" XPages: Performance-Optimierung Heinz Ulrich Krause BCC Unternehmensberatung GmbH http://www.bcc.biz www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ • 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) www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ Agenda • • • • • • • • Was kann die Performance beeinflussen ? Java oder JavaScript ? ViewNavigator oder GetNextDocument Stringbuilder oder Concat (+) JSF Lifecycle Listener Partial Update / Partial Execute Variable Resolver Tools www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ Typischer XPages Request www.dnug.de
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ JavaScript/CSS Aggregation www.dnug.de
  • 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
  • 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
  • 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
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ Application Scope aktualisieren www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ JSF Lifecycle www.dnug.de
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ XPages Masterclass http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=XPages%20Masterclass www.dnug.de
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ DataContext – ACHTUNG !!!! • Niemals dynamisch berechnen !!. – Die Berechnung erfolgt mehrfach, auch bei einem partial refresh www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ DataContext – ACHTUNG !!!! www.dnug.de
  • 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
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ Partial Refresh / Update (Cons) • Mehrere Aktualisierungen – http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-84B6VP www.dnug.de
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ Image Sprites http://www.w3schools.com/css/tryit.asp?filename=trycss_sprites_img www.dnug.de
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ Performance Messen: XPages Toolbox www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ Performance Messen: XPages Toolbox • 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 www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ Heapdump / Javadump Analyzer www.dnug.de
  • 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
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ Optimierung – Schritt für Schritt www.dnug.de
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ Step1: Messergebnis www.dnug.de
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ Step2: Messergebnis www.dnug.de
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ Step 3: Messergebnis www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ Step 4: Erzeugung des JSON in einer Ansicht www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ Step 4: Messergebnis www.dnug.de
  • 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
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ Step 5: StringBuilder • Verwenden des Stringbuilders zum Zusammenbau des JSON www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ Step 5: Messergebnis www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ Step 6: Warum nicht gleich in Java … www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ Step 6: Messergebnis www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ Fragen? Feedback gern auch per Email ulrich_krause@bcc.biz www.dnug.de
  • Social Collaboration 39: "Vernetzte Informationswelt“ www.dnug.de
  • 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
  • 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
  • Social Collaboration 39: "Vernetzte Informationswelt“ • Global Application / Configuration properties www.dnug.de