SlideShare ist ein Scribd-Unternehmen logo
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

Weitere ähnliche Inhalte

PPT
AdminCamp 2011 Performance
PDF
Ausgewählte Performance Technologien
PPT
Top 10 Internet Trends 2005
PDF
Überblick Oracle Datenbank 12c
PPT
PDF
Ausgewählte PL/SQL Packages (1)
PDF
Roadshow: What's new in Microsoft SQL Server 2016
PDF
Performance-Analyse von Oracle-Datenbanken mit Panorama
AdminCamp 2011 Performance
Ausgewählte Performance Technologien
Top 10 Internet Trends 2005
Überblick Oracle Datenbank 12c
Ausgewählte PL/SQL Packages (1)
Roadshow: What's new in Microsoft SQL Server 2016
Performance-Analyse von Oracle-Datenbanken mit Panorama

Was ist angesagt? (15)

PDF
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
PPTX
Oracle und Hochverfügbarkeit – Verschiedene Ansätze im Vergleich
PDF
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
PDF
Oracle-DB: Active Session History: into the deep
PDF
Web-Performance-Optimierung mit varnish
PDF
Exadata with VM as Consolidation Plattform
PDF
Überblick Oracle Datenbank Hochverfügbarkeit
PDF
Oracle-DB: Sicheres Identifizieren von nicht relevanten indizes
PDF
Tipps und Skripts aus dem Leben eines Connections Admins
PDF
Web-Performance-Optimierung mit varnish
PPTX
Oracle Data Guard: Mit oder ohne Broker?
PPTX
SQL Server Transaction Log Deep Dive Session - PASS Hamburg
PDF
JBoss EAP clustering
PDF
Oracle-DB: Systematische Rasterfahndung nach Performance-Antipattern
PDF
JBoss AS / EAP Clustering
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
Oracle und Hochverfügbarkeit – Verschiedene Ansätze im Vergleich
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Active Session History: into the deep
Web-Performance-Optimierung mit varnish
Exadata with VM as Consolidation Plattform
Überblick Oracle Datenbank Hochverfügbarkeit
Oracle-DB: Sicheres Identifizieren von nicht relevanten indizes
Tipps und Skripts aus dem Leben eines Connections Admins
Web-Performance-Optimierung mit varnish
Oracle Data Guard: Mit oder ohne Broker?
SQL Server Transaction Log Deep Dive Session - PASS Hamburg
JBoss EAP clustering
Oracle-DB: Systematische Rasterfahndung nach Performance-Antipattern
JBoss AS / EAP Clustering
Anzeige

Andere mochten auch (12)

PPTX
Speed up your XPages Application performance
ODP
XPages OneUIv2 Theme Deep Dive
PDF
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
ODP
IBM Connect 2014 - AD204: What's new in the IBM Domino Objects: By Example
PDF
RESTful services on IBM Domino/XWork
PPTX
C/ C++ for Notes & Domino Developers
PDF
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
PPTX
IBM Connections Cloud Administration
PDF
IBM ConnectED 2015 - MAS103 XPages Performance and Scalability
PPTX
Life in the fast lane. Full speed XPages
PPTX
Transformations
PPTX
Transformations - a TLCC & Teamstudio Webinar
Speed up your XPages Application performance
XPages OneUIv2 Theme Deep Dive
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
IBM Connect 2014 - AD204: What's new in the IBM Domino Objects: By Example
RESTful services on IBM Domino/XWork
C/ C++ for Notes & Domino Developers
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM Connections Cloud Administration
IBM ConnectED 2015 - MAS103 XPages Performance and Scalability
Life in the fast lane. Full speed XPages
Transformations
Transformations - a TLCC & Teamstudio Webinar
Anzeige

Ähnlich wie XPages: Performance-Optimierung - Ulrich Krause (eknori) SNoUG 2013 (20)

PPTX
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und beheben
PDF
OSMC 2011 | Collectd in der großen weiten Welt - Anbindung des Datensammlers ...
PDF
Tipps zur Performanceoptimierung für Liferay Portal
PDF
JavaScript goes Enterprise - Node.js-Anwendungen mit Visual Studio und den No...
PDF
Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
PDF
JavaScript Performance
PDF
Elastic Stack: Grundlagen der zentralen Logdatenverwaltung (Webinar vom 15. A...
PDF
Fanstatic pycon.de 2012
PDF
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
PDF
Ajax in domino web-anwendungen - der nächste schritt
PPT
Dnug35 ak-dev.071111-beyond
PDF
digitalSTROM Developer Day 2011: Jump Start in die digitalSTROM-Server Entwic...
PDF
Grundlagen postgresql
PPTX
Avoid Network-Issues and Polling
PDF
Android Ice Cream Sandwich WJAX 2011
PPTX
ShareConf 2014: 10 Gründe warum der SharePoint langsam ist
PPT
Skalierung & Performance
PPTX
Dnug 112014 modernization_openn_ntf_ersatzsession
PDF
Jug nbg containerplattform dcos
PDF
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und beheben
OSMC 2011 | Collectd in der großen weiten Welt - Anbindung des Datensammlers ...
Tipps zur Performanceoptimierung für Liferay Portal
JavaScript goes Enterprise - Node.js-Anwendungen mit Visual Studio und den No...
Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
JavaScript Performance
Elastic Stack: Grundlagen der zentralen Logdatenverwaltung (Webinar vom 15. A...
Fanstatic pycon.de 2012
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Ajax in domino web-anwendungen - der nächste schritt
Dnug35 ak-dev.071111-beyond
digitalSTROM Developer Day 2011: Jump Start in die digitalSTROM-Server Entwic...
Grundlagen postgresql
Avoid Network-Issues and Polling
Android Ice Cream Sandwich WJAX 2011
ShareConf 2014: 10 Gründe warum der SharePoint langsam ist
Skalierung & Performance
Dnug 112014 modernization_openn_ntf_ersatzsession
Jug nbg containerplattform dcos

Mehr von BCC - Solutions for IBM Collaboration Software (19)

PPTX
Connections 5.x to 6.0 migration
PPTX
General Data Protection Regulation
PDF
Systematisch: Von der alten in die neue Welt - Migrations-Szenarien
PDF
MaRisk Andorderungen erfüllen - Analyse von Rechten und Rollen in IBM Domino ...
PDF
Protect your IBM Domino data from leaks with BCC DominoProtect
PPTX
IBM Connect 2016: Speaker Session with Teresa Deane, Senior Developer, BCC
PDF
Dr. Strangelove, or how I learned to love plug-in development - SNoUG 2014
PDF
Using Social Business Software and being compliant with EU data protection la...
PDF
Keine Kompromisse! Mehr Sicherheit & Compliance für IBM Domino
PDF
Honey, I shrunk the data - Mehr Platz am IBM Domino Server
PDF
Wie schützen Sie Ihre Messaging- & Collaboration-Infrastruktur? Lessons learn...
PDF
IBM Connect 2014 SPOT114: No Compromise on Compliance: Streamline Administrat...
PDF
Platz schaffen auf dem Domino - Compact, Compress, De-Duplicate - Ulrich Krau...
PDF
Deep Dive Domino Mail Routing - SMTP Cookbook - DNUG Herbstkonferenz 2013
PDF
Deep Dive AdminP Process - Admin and Infrastructure Track at UKLUG 2012
PDF
Platz da! Platz schaffen auf dem Domino Server - Vortrag von Ulrich Krause be...
PDF
Wie gewährleisten Sie die Einhaltung von Sicherheitsanforderungen an Ihre Mes...
PDF
Wie schützen Sie Ihre E-Mail-Kommunikation? Kurzfristige Lösungsansätze bis z...
PPTX
BCC solutions for IBM Notes & Domino Infrastructure & Administration
Connections 5.x to 6.0 migration
General Data Protection Regulation
Systematisch: Von der alten in die neue Welt - Migrations-Szenarien
MaRisk Andorderungen erfüllen - Analyse von Rechten und Rollen in IBM Domino ...
Protect your IBM Domino data from leaks with BCC DominoProtect
IBM Connect 2016: Speaker Session with Teresa Deane, Senior Developer, BCC
Dr. Strangelove, or how I learned to love plug-in development - SNoUG 2014
Using Social Business Software and being compliant with EU data protection la...
Keine Kompromisse! Mehr Sicherheit & Compliance für IBM Domino
Honey, I shrunk the data - Mehr Platz am IBM Domino Server
Wie schützen Sie Ihre Messaging- & Collaboration-Infrastruktur? Lessons learn...
IBM Connect 2014 SPOT114: No Compromise on Compliance: Streamline Administrat...
Platz schaffen auf dem Domino - Compact, Compress, De-Duplicate - Ulrich Krau...
Deep Dive Domino Mail Routing - SMTP Cookbook - DNUG Herbstkonferenz 2013
Deep Dive AdminP Process - Admin and Infrastructure Track at UKLUG 2012
Platz da! Platz schaffen auf dem Domino Server - Vortrag von Ulrich Krause be...
Wie gewährleisten Sie die Einhaltung von Sicherheitsanforderungen an Ihre Mes...
Wie schützen Sie Ihre E-Mail-Kommunikation? Kurzfristige Lösungsansätze bis z...
BCC solutions for IBM Notes & Domino Infrastructure & Administration

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

  • 1. Social Collaboration 39: "Vernetzte Informationswelt" XPages: Performance-Optimierung Heinz Ulrich Krause BCC Unternehmensberatung GmbH http://www.bcc.biz www.dnug.de
  • 2. 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
  • 3. 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
  • 4. Social Collaboration 39: "Vernetzte Informationswelt“ Typischer XPages Request www.dnug.de
  • 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
  • 16. Social Collaboration 39: "Vernetzte Informationswelt“ JavaScript/CSS Aggregation 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
  • 22. Social Collaboration 39: "Vernetzte Informationswelt“ JSF Lifecycle 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
  • 27. Social Collaboration 39: "Vernetzte Informationswelt“ DataContext – ACHTUNG !!!! 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
  • 41. Social Collaboration 39: "Vernetzte Informationswelt“ Performance Messen: XPages Toolbox www.dnug.de
  • 42. 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
  • 43. Social Collaboration 39: "Vernetzte Informationswelt“ Heapdump / Javadump Analyzer 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
  • 48. Social Collaboration 39: "Vernetzte Informationswelt“ Step1: Messergebnis 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
  • 50. Social Collaboration 39: "Vernetzte Informationswelt“ Step2: Messergebnis 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
  • 52. Social Collaboration 39: "Vernetzte Informationswelt“ Step 3: Messergebnis www.dnug.de
  • 53. Social Collaboration 39: "Vernetzte Informationswelt“ Step 4: Erzeugung des JSON in einer Ansicht www.dnug.de
  • 54. Social Collaboration 39: "Vernetzte Informationswelt“ Step 4: Messergebnis 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
  • 58. Social Collaboration 39: "Vernetzte Informationswelt“ Step 5: Messergebnis www.dnug.de
  • 59. Social Collaboration 39: "Vernetzte Informationswelt“ Step 6: Warum nicht gleich in Java … www.dnug.de
  • 60. Social Collaboration 39: "Vernetzte Informationswelt“ Step 6: Messergebnis www.dnug.de
  • 61. Social Collaboration 39: "Vernetzte Informationswelt“ Fragen? Feedback gern auch per Email ulrich_krause@bcc.biz www.dnug.de
  • 62. Social Collaboration 39: "Vernetzte Informationswelt“ 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