SlideShare una empresa de Scribd logo
1 de 68
Entwicklercamp 2013

Full Speed XPages
Performanceoptimierung
11. – 13..03.2013
Maritim Hotel, Gelsenkirchen

Ulrich Krause, BCC Unternehmensberatung GmbH
Über: Ulrich Krause
 Lotus Notes / Domino Administrator & Entwickler seit 1993
 Senior Software Architect



 OpenNTF Contributor
 OpenNTF Board of Directors

 IBM Champion 2011/2012/2013
 Blog http://www.eknori.de
 Notes Forum (http://www.atnotes.de)
Agenda
   Performance, was kann bremsen ?
   Java vs. JavaScript
   Daten vorbereiten, ViewNavigator vs. GetNextDocument
   Stringbuilder vs. Concat (+)
   JSF Lifecycle Listener
   Partial Update / Partial Execute
   Variable Resolver
   Werkzeuge
XPages Request
Hardware
 Die verwendete Hardware hat einen nicht unerheblichen Einfluß
  auf die Performance. Es gibt 3 Kernelemente
   • CPU
   • Arbeitsspeicher
   • Festplatten
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”
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
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
XPages Design Optimizations
 Berechnungen während der JSF Lifecycle Phasen reduzieren
   • Wenn möglich, partial update verwenden
   • Wenn möglich, partial execute verwenden
   • Wenn möglich, disableValidators & immediate verwenden
 Berechnungen für „Sichtbar“ reduzieren
   • „Loaded“ Eigenschaft verwenden um „Rendered“ zu berechnen
   • Ergebnis der Berechnung zwischenspeichern ( scopedVariable)
   • VariableResolver verwenden
 Repeats & Views
   • viewEntry.getColumnValue antelle von viewEntry.getDocument.getColumn
   • View data source dataCache property
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
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
General Performance options
 notes.ini
   • HTTPJVMMaxHeapSizeSet=1
   • HTTPJVMMaxHeapSize=256M
       • sollte auf ¼ des verfügbaren RAM gesetzt werden
 Domino Administrator
   • HTTP server "Enable logging to" disabled
   • HTTP server thread count – defaults to 40
        Generell hat das Debug Einfluß auf die Performance
   • JavaEnableDebug=1
   • JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=800
     0
   • JavascriptEnableDebug=1 ( ab Version 9 )
Reducing Memory Utilization
 xsp.persistence.mode=
 Defines the persistence mode for the JSF pages
   • file: All the pages are persisted on disk
   • fileex: All the pages are persisted on disk except the current one, which
     stays in memory
   • <else>: All the pages stay in memory (tree mode)
XPages Design Optimizations
 Loadtime vs Runtime
   • Loaded vs Rendered
   • ExtLib Dynamic Content
       • allows partial re-loading so more use of load-time optimizations
 CSS & browser JS
   • Kein inline CSS / JS
   • Auslagern in entsprechende Designelemente
   • Dateien so klein wie möglich halten
 Bilder
   • Größe nicht zur Laufzeit berechnen
   • CSS Image Sprites verwenden, wenn möglich
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
                                               Auf dem Server: xsp.properties:
                                               xsp.resources.aggregate=true
JavaScript/CSS Aggregation
XPages Pre-Load
 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 Pre-Load
• XPagesPreloadDB=Server!!Db.nsf/XPage.xsp, myLocalDb.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
Scoped Variables
 applicationScope
      • Are visible for all users of one application. Expires some time after the last user
        used an applicationScope variable.
        That means applicationScope variables are NOT persistent forever.
 sessionScope
      • Is valid through the session of the current user. A user session expires after
        some time of inactivity. Uses don't have access to the sessionScope variables of
        other users.
 viewScope
      • Is visible for views on the current page only. Useful for transporting a search
        query to a view.
 requestScope
      • Is valid through one request of the current user. That includes refreshing of a
        page.
Caching und Application Scope
JAVA Design Element (8.5.3)
 A Java design element is created just like you create any other
  design element.
 Categorization in the Designer views is shown by using the "/"
  character to demark levels
 In the virtual file system, the class file appears separate from
  the .java file, under WebContentWEB-INFclasses
JAR Design Element ( V9 )
 Work with packaged Java code/libraries that are included in the
  application NSF
 Frees you from having to deploy the JARS to a server and/or
  include the source files uniquely in the application database
 Automatically manages the classpath and places the JAR file into
  web-inf/lib
 Only available to XPages
  applications
   • automatically loaded by the
     XPages runtime
When to Execute - # vs $
 #
  • Wird jedes Mal ausgeführt, wenn die Seite gerendert wird
  • Wenn Werte sich ändern. (Computed values / Abhängigkeiten )
 $
  • Wird nur beim ersten Seitenaufbau ausgeführt.
  • Wenn sich Werte nicht ändern ( Label )
DataContext
 dataContexts can be thought of as global variables
 dataContext's value can be computed dynamically or on page
  load
   • So you can use ${javascript:@Today()} and run it once rather than running
     a function each time.
 dataContexts can be scoped to any level that datasources can
   • XPage, Custom Control or Panel
   • you can set a dataContext in a panel in a repeat control, to avoid multiple
     references to a NotesDocument's item
 dataContexts are referenced using EL
   • So at no point in the references do you run SSJS, so it's not having to go
     through the SSJS parser
DataContext - Pitfall
 Problem beim data context und dynamischen binding
   • They will be recomputed again and again, even when in Partial Execution
     mode and if they are not in use (http://hasselba.ch/blog/?p=1112)
DataContext - Pitfall
JSF Lifecycle
XPages Masterclass




http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=XPages%20Masterclass
XPages Lifecycle Listener
 Was passiert in den einzelnen Phasen des JSF Lifecycle




 Ulrich Krause: http://openntf.org/XSnippets.nsf/snippet.xsp?id=a-simple-lifecyclelistener-
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
Partial Refresh / Update (Contra)
 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




            http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-84B6VP
Partial Execution
 Reduced control processing in the 3 data-processing phases
       • Means less work on the server, faster response times


 Dependancy on Edit Box values outside of the exec area
       • Submitted values from Edit Boxes and/or other input controls in other areas of
         the control tree are not processed, so any control values and document fields
         in those other areas will not be updated. 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.


 onclick Event Handler must be in the exec area
       • 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
 execMode erst ab 8.5.1
 Setzen der execId in V8.5.1 und V9
disableValidators / immediate
 disableValidators
   •   JSF Lifecycle durchläuft alle Phasen (1-6)
   •   es findet aber keine Validierung der Daten statt
   •   Converters funktionieren weiterhin.
   •   Items 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
   •   Items in Dokumenten werden nicht aktualisiert
   •   Event Handler onclick scripts und renderResponse Berechnungen werden
       ausgeführt
Minimize work in rendered/ visible computation
 Most properties, like CSS “style” are only computed in the
  renderResponse
 Edit Box and input “value” properties are used in Data Processing
  phases & renderResponse
 Data Source properties are computed during renderResponse &
  results are cached for the next request's Data Processing &
  invokeApplication phases
Minimize work in rendered / visible computation
 The rendered property is computed in all 5 lifecycle phases
 Avoid re-computing values in every rendered property

   • @DbLookup, @DbColumn, getDocumentByKey
   • In the rendered property, save the computed boolean to a viewScope
     variable
Using loaded vs rendered
 Loaded
   • is only computed once in the createView phase
       • not re-computed in the 5 usual phases
   • false means the control is not created. So it can never be rendered.
   • true means the control is added to the control tree.
       • You can still compute rendered when loaded evaluates to true.


 Compute the loaded property on conditions
   • where you could compute the rendered property and save it to the view
     scope
   • it would never need to be recomputed for the rest of the interaction with
     this page
Images
 Use correct file type depending on content
   • JPEG for complexed detailed images

   • PNG/GIF for simple images, fonts, transparencies
       • Use the HTML <img tag “width” and “height” attributes


   • For faster HTML layout in the browser
       • Size the image to size you intend to use
       • Resizing using html attributes height and width will delay the rendering of your
         page
       • Images larger than necessary will waste bandwidth
CSS Image Sprites
 Use CSS Image Sprites
   • If you have multiple small images, make a single larger image containing
     the smaller images
   • And use CSS to display just the relevant subset image at a llocation in the
     page
   • For semantically significant sprites, provide an accessibility “title” attribut
     (as sprites don't use the IMG “alt” attribute, but you still want to assist
     blind users)
   • There's no specific XPages support for sprites, but they're used in the
     XPages OneIU themes
CSS Image Sprite Sample




http://www.w3schools.com/css/tryit.asp?filename=trycss_sprites_img
XPages Toolbox
 XPages based Application
    • Runs on the Domino server or the Notes client
    • An NSF needs to be installed on the Domino server/Notes client
    • A profiler jar file should be added to the JVM launch options


 Measures the CPU performance and the memory allocation
 Available from OpenNTF.org
    • Free open source project
    • Search for “XPages Toolbox”
 Extended in 8.5.2 to support Backend classes profiling
 http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=XPages%20Toolbox
XPages Toolbox
XPages Toolbox
 Generate a heap dump of the JVM running in the HTTP task
   • A button in the XPages profiler generates the heap dump
   • From the Domino console

       • tell http xsp heapdump (triggers com.ibm.jvm.Dump.HeapDump())
       • tell http xsp javadump (triggers com.ibm.jvm.Dump.JavaDump())


 Analyze the heap dump using the Eclipse memory analyzer
   • http://www.eclipse.org/mat/
   • http://www.ibm.com/developerworks/java/jdk/tools/dtfj.html


 HTTPJVMMaxHeapSizeSet=1
 HTTPJVMMaxHeapSize=256M
Heapdump / Javadump Analyzer
More Tools
 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
      • Heap memory usage will be a subset of process memory, but heap dumps are
        only a snapshot
More Tools
 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 objects, step into code.
   • Use the Eclipse Java debugger.
   • In Dominonotes.ini add these 2 options:
       • JavaEnableDebug=1
       • JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000
Demo
JSON Daten
             {
             "@unid":"00065A23B16A0E5EC1257AEB00315D53",
             "FirstName":"Concetta",
             "LastName":"Galloway",
             "State":"AZ",
             "City":"Mesa"
             },
             {
             "@unid":"000C0B447A8D3FEBC1257AEB00314648",
             "FirstName":"Annmarie",
             "LastName":"Crosby",
             "State":"TX",
             "City":"El Paso"
             },
             ...
XAgent – SSJS
   Get all „Contacts“ into a NotesDocumentCollection, loop the collection and build
    the JSON by reading the values from items in the document
XAgent – SSJS
XAgent – SSJS – UNID from Item
   Get all „Contacts“ into a NotesDocumentCollection, loop the collection and build
    the JSON by reading the values from items in the document. Also UNID is stored
    in document
XAgent – SSJS – UNID from Item
XAgent – SSJS - SingleItem
   Get all „Contacts“ into a NotesDocumentCollection, loop the collection and get the
    JSON from an item on the document. The JSON is calculated on document save
XAgent – SSJS - SingleItem
XAgent – SSJS – ViewNavigator
 loop thru a view and get the JSON from a view column.
XAgent – SSJS – ViewNavigator
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
   String text=               System.out.println("x:"+x+" y:"+y);
       "line 1n"+
       "line 2n"+
       "line 3";
StringBuilder vs String.concat
 When to use StringBuilder over '+' (String.concat()) ?
   • use StringBuilder whenever you assemble a String in a loop
   • Just keep in mind that '+' isn't always a good idea




    http://kaioa.com/node/59
XAgent – SSJS – ViewNavigator + StringBuilder
   loop thru a view and get the JSON from a view column. Use a StringBuilder to concat
    the JSON
XAgent – SSJS – ViewNavigator + StringBuilder
XAgent – Java
   loop thru a view and get the JSON from a view column. Use a StringBuilder to concat
    the JSON + use Java instead of SSJS
XAgent – Java
Themes
 Single Document Containing References to all your CSS Resources
   • resource sections reference the CSS files used
   • 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
   • built-in themes to extend
       • webstandard, notes, oneUI
Themes
 Create your own themes from scratch.
 Creating a theme that extends from the webstandard or another
  supplied theme will include extra stylesheets and styles that you
  might not need.
 Be prepared to spend more time writing css though
Ressourcen im Theme laden
 Global Application / Configuration properties
Q+A
•   Mail: eknori@eknori.de
•   Blog: http://www.eknori.de
•   Sametime: bleedyellow.com
•   Twitter: eknori
XPages Performance

Más contenido relacionado

La actualidad más candente

Engage2022 - Domino Admin Tips
Engage2022 - Domino Admin TipsEngage2022 - Domino Admin Tips
Engage2022 - Domino Admin TipsGabriella Davis
 
RNUG - HCL Notes V11 Performance Boost
RNUG - HCL Notes V11 Performance BoostRNUG - HCL Notes V11 Performance Boost
RNUG - HCL Notes V11 Performance BoostChristoph Adler
 
RNUG - Dirty Secrets of the Notes Client
RNUG - Dirty Secrets of the Notes ClientRNUG - Dirty Secrets of the Notes Client
RNUG - Dirty Secrets of the Notes ClientChristoph Adler
 
HTTP - The Other Face Of Domino
HTTP - The Other Face Of DominoHTTP - The Other Face Of Domino
HTTP - The Other Face Of DominoGabriella Davis
 
Open mic activity logging
Open mic activity loggingOpen mic activity logging
Open mic activity loggingRanjit Rai
 
Von A bis Z-itrix: Installieren Sie den stabilsten und schnellsten HCL Notes-...
Von A bis Z-itrix: Installieren Sie den stabilsten und schnellsten HCL Notes-...Von A bis Z-itrix: Installieren Sie den stabilsten und schnellsten HCL Notes-...
Von A bis Z-itrix: Installieren Sie den stabilsten und schnellsten HCL Notes-...panagenda
 
All You Need to Know About HCL Notes 64-Bit Clients
All You Need to Know About HCL Notes 64-Bit ClientsAll You Need to Know About HCL Notes 64-Bit Clients
All You Need to Know About HCL Notes 64-Bit Clientspanagenda
 
Optimizing RocksDB for Open-Channel SSDs
Optimizing RocksDB for Open-Channel SSDsOptimizing RocksDB for Open-Channel SSDs
Optimizing RocksDB for Open-Channel SSDsJavier González
 
Java for XPages Development
Java for XPages DevelopmentJava for XPages Development
Java for XPages DevelopmentTeamstudio
 
Developer Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit ClientsDeveloper Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit Clientspanagenda
 
Domino server controller domino console
Domino server controller   domino consoleDomino server controller   domino console
Domino server controller domino consolerchavero
 
KafkaConsumer - Decoupling Consumption and Processing for Better Resource Uti...
KafkaConsumer - Decoupling Consumption and Processing for Better Resource Uti...KafkaConsumer - Decoupling Consumption and Processing for Better Resource Uti...
KafkaConsumer - Decoupling Consumption and Processing for Better Resource Uti...confluent
 
Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)
Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)
Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)Per Henrik Lausten
 
HCL Sametime 12.0 on Docker - Step-By-Step.pdf
HCL Sametime 12.0 on Docker - Step-By-Step.pdf HCL Sametime 12.0 on Docker - Step-By-Step.pdf
HCL Sametime 12.0 on Docker - Step-By-Step.pdf Ales Lichtenberg
 
Zookeeper Introduce
Zookeeper IntroduceZookeeper Introduce
Zookeeper Introducejhao niu
 
HCL Notes and Nomad Troubleshooting for Dummies
HCL Notes and Nomad Troubleshooting for DummiesHCL Notes and Nomad Troubleshooting for Dummies
HCL Notes and Nomad Troubleshooting for Dummiespanagenda
 
Domino policies deep dive
Domino policies deep diveDomino policies deep dive
Domino policies deep diveMartijn de Jong
 
Memory Management in Windows 7
Memory Management in Windows 7Memory Management in Windows 7
Memory Management in Windows 7Naveed Qadri
 

La actualidad más candente (20)

Engage2022 - Domino Admin Tips
Engage2022 - Domino Admin TipsEngage2022 - Domino Admin Tips
Engage2022 - Domino Admin Tips
 
RNUG - HCL Notes V11 Performance Boost
RNUG - HCL Notes V11 Performance BoostRNUG - HCL Notes V11 Performance Boost
RNUG - HCL Notes V11 Performance Boost
 
RNUG - Dirty Secrets of the Notes Client
RNUG - Dirty Secrets of the Notes ClientRNUG - Dirty Secrets of the Notes Client
RNUG - Dirty Secrets of the Notes Client
 
HTTP - The Other Face Of Domino
HTTP - The Other Face Of DominoHTTP - The Other Face Of Domino
HTTP - The Other Face Of Domino
 
HCL Domino V12 - TOTP
HCL Domino V12 - TOTPHCL Domino V12 - TOTP
HCL Domino V12 - TOTP
 
Open mic activity logging
Open mic activity loggingOpen mic activity logging
Open mic activity logging
 
Von A bis Z-itrix: Installieren Sie den stabilsten und schnellsten HCL Notes-...
Von A bis Z-itrix: Installieren Sie den stabilsten und schnellsten HCL Notes-...Von A bis Z-itrix: Installieren Sie den stabilsten und schnellsten HCL Notes-...
Von A bis Z-itrix: Installieren Sie den stabilsten und schnellsten HCL Notes-...
 
All You Need to Know About HCL Notes 64-Bit Clients
All You Need to Know About HCL Notes 64-Bit ClientsAll You Need to Know About HCL Notes 64-Bit Clients
All You Need to Know About HCL Notes 64-Bit Clients
 
Optimizing RocksDB for Open-Channel SSDs
Optimizing RocksDB for Open-Channel SSDsOptimizing RocksDB for Open-Channel SSDs
Optimizing RocksDB for Open-Channel SSDs
 
Java for XPages Development
Java for XPages DevelopmentJava for XPages Development
Java for XPages Development
 
Developer Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit ClientsDeveloper Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit Clients
 
Domino server controller domino console
Domino server controller   domino consoleDomino server controller   domino console
Domino server controller domino console
 
KafkaConsumer - Decoupling Consumption and Processing for Better Resource Uti...
KafkaConsumer - Decoupling Consumption and Processing for Better Resource Uti...KafkaConsumer - Decoupling Consumption and Processing for Better Resource Uti...
KafkaConsumer - Decoupling Consumption and Processing for Better Resource Uti...
 
Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)
Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)
Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)
 
HCL Sametime 12.0 on Docker - Step-By-Step.pdf
HCL Sametime 12.0 on Docker - Step-By-Step.pdf HCL Sametime 12.0 on Docker - Step-By-Step.pdf
HCL Sametime 12.0 on Docker - Step-By-Step.pdf
 
Zookeeper Introduce
Zookeeper IntroduceZookeeper Introduce
Zookeeper Introduce
 
HCL Notes and Nomad Troubleshooting for Dummies
HCL Notes and Nomad Troubleshooting for DummiesHCL Notes and Nomad Troubleshooting for Dummies
HCL Notes and Nomad Troubleshooting for Dummies
 
Domino policies deep dive
Domino policies deep diveDomino policies deep dive
Domino policies deep dive
 
Memory Management in Windows 7
Memory Management in Windows 7Memory Management in Windows 7
Memory Management in Windows 7
 
60 Admin Tips
60 Admin Tips60 Admin Tips
60 Admin Tips
 

Destacado

The Autobahn Has No Speed Limit - Your XPages Shouldn't Either!
The Autobahn Has No Speed Limit - Your XPages Shouldn't Either!The Autobahn Has No Speed Limit - Your XPages Shouldn't Either!
The Autobahn Has No Speed Limit - Your XPages Shouldn't Either!Teamstudio
 
MWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVCMWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVCUlrich Krause
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the BasicsUlrich Krause
 
Dd13.2013.milano.open ntf
Dd13.2013.milano.open ntfDd13.2013.milano.open ntf
Dd13.2013.milano.open ntfUlrich Krause
 
UKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUlrich Krause
 
La vita nella corsia di sorpasso; A tutta velocità, XPages!
La vita nella corsia di sorpasso; A tutta velocità, XPages!La vita nella corsia di sorpasso; A tutta velocità, XPages!
La vita nella corsia di sorpasso; A tutta velocità, XPages!Ulrich Krause
 
Dr. Strangelove, or how I learned to love plugin development
Dr. Strangelove, or how I learned to love plugin developmentDr. Strangelove, or how I learned to love plugin development
Dr. Strangelove, or how I learned to love plugin developmentUlrich Krause
 
Life In The FastLane: Full Speed XPages
Life In The FastLane: Full Speed XPagesLife In The FastLane: Full Speed XPages
Life In The FastLane: Full Speed XPagesUlrich Krause
 
IBM Lotus Notes - From PLATO to the Leading Groupware Platform
IBM Lotus Notes - From PLATO to the Leading Groupware PlatformIBM Lotus Notes - From PLATO to the Leading Groupware Platform
IBM Lotus Notes - From PLATO to the Leading Groupware PlatformUlrich Krause
 
Dnug35 ak-dev.071111-basic
Dnug35 ak-dev.071111-basicDnug35 ak-dev.071111-basic
Dnug35 ak-dev.071111-basicUlrich Krause
 
[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the BasicsUlrich Krause
 
Extension Library - Viagra for XPages
Extension Library - Viagra for XPagesExtension Library - Viagra for XPages
Extension Library - Viagra for XPagesUlrich Krause
 
Life in the fast lane. Full speed XPages
Life in the fast lane. Full speed XPagesLife in the fast lane. Full speed XPages
Life in the fast lane. Full speed XPagesUlrich Krause
 
Compact, Compress, De-Duplicate (DAOS)
Compact, Compress, De-Duplicate (DAOS)Compact, Compress, De-Duplicate (DAOS)
Compact, Compress, De-Duplicate (DAOS)Ulrich Krause
 
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMichael Smith
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 PerformanceUlrich Krause
 
Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookUlrich Krause
 

Destacado (20)

The Autobahn Has No Speed Limit - Your XPages Shouldn't Either!
The Autobahn Has No Speed Limit - Your XPages Shouldn't Either!The Autobahn Has No Speed Limit - Your XPages Shouldn't Either!
The Autobahn Has No Speed Limit - Your XPages Shouldn't Either!
 
MWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVCMWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVC
 
XPages - The Basics
XPages - The BasicsXPages - The Basics
XPages - The Basics
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the Basics
 
Dd13.2013.milano.open ntf
Dd13.2013.milano.open ntfDd13.2013.milano.open ntf
Dd13.2013.milano.open ntf
 
Ec13 xpages-basic
Ec13 xpages-basicEc13 xpages-basic
Ec13 xpages-basic
 
UKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basics
 
La vita nella corsia di sorpasso; A tutta velocità, XPages!
La vita nella corsia di sorpasso; A tutta velocità, XPages!La vita nella corsia di sorpasso; A tutta velocità, XPages!
La vita nella corsia di sorpasso; A tutta velocità, XPages!
 
Dr. Strangelove, or how I learned to love plugin development
Dr. Strangelove, or how I learned to love plugin developmentDr. Strangelove, or how I learned to love plugin development
Dr. Strangelove, or how I learned to love plugin development
 
Life In The FastLane: Full Speed XPages
Life In The FastLane: Full Speed XPagesLife In The FastLane: Full Speed XPages
Life In The FastLane: Full Speed XPages
 
IBM Lotus Notes - From PLATO to the Leading Groupware Platform
IBM Lotus Notes - From PLATO to the Leading Groupware PlatformIBM Lotus Notes - From PLATO to the Leading Groupware Platform
IBM Lotus Notes - From PLATO to the Leading Groupware Platform
 
Dnug35 ak-dev.071111-basic
Dnug35 ak-dev.071111-basicDnug35 ak-dev.071111-basic
Dnug35 ak-dev.071111-basic
 
[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics
 
Extension Library - Viagra for XPages
Extension Library - Viagra for XPagesExtension Library - Viagra for XPages
Extension Library - Viagra for XPages
 
Life in the fast lane. Full speed XPages
Life in the fast lane. Full speed XPagesLife in the fast lane. Full speed XPages
Life in the fast lane. Full speed XPages
 
Find your data
Find your dataFind your data
Find your data
 
Compact, Compress, De-Duplicate (DAOS)
Compact, Compress, De-Duplicate (DAOS)Compact, Compress, De-Duplicate (DAOS)
Compact, Compress, De-Duplicate (DAOS)
 
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 Performance
 
Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbook
 

Similar a XPages Performance

On-boarding with JanusGraph Performance
On-boarding with JanusGraph PerformanceOn-boarding with JanusGraph Performance
On-boarding with JanusGraph PerformanceChin Huang
 
node.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoonnode.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang YoonJesang Yoon
 
WildFly AppServer - State of the Union
WildFly AppServer - State of the UnionWildFly AppServer - State of the Union
WildFly AppServer - State of the UnionDimitris Andreadis
 
Krug Fat Client
Krug Fat ClientKrug Fat Client
Krug Fat ClientPaul Klipp
 
Server Side Javascript
Server Side JavascriptServer Side Javascript
Server Side Javascriptrajivmordani
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.jsorkaplan
 
Drupalcamp Estonia - High Performance Sites
Drupalcamp Estonia - High Performance SitesDrupalcamp Estonia - High Performance Sites
Drupalcamp Estonia - High Performance SitesExove
 
Drupalcamp Estonia - High Performance Sites
Drupalcamp Estonia - High Performance SitesDrupalcamp Estonia - High Performance Sites
Drupalcamp Estonia - High Performance Sitesdrupalcampest
 
Docker based Architecture by Denys Serdiuk
Docker based Architecture by Denys SerdiukDocker based Architecture by Denys Serdiuk
Docker based Architecture by Denys SerdiukLohika_Odessa_TechTalks
 
Developing High Performance Web Apps - CodeMash 2011
Developing High Performance Web Apps - CodeMash 2011Developing High Performance Web Apps - CodeMash 2011
Developing High Performance Web Apps - CodeMash 2011Timothy Fisher
 
Know More About Rational Performance - Snehamoy K
Know More About Rational Performance - Snehamoy KKnow More About Rational Performance - Snehamoy K
Know More About Rational Performance - Snehamoy KRoopa Nadkarni
 
3 know more_about_rational_performance_tester_8-1-snehamoy_k
3 know more_about_rational_performance_tester_8-1-snehamoy_k3 know more_about_rational_performance_tester_8-1-snehamoy_k
3 know more_about_rational_performance_tester_8-1-snehamoy_kIBM
 
Web Sphere Problem Determination Ext
Web Sphere Problem Determination ExtWeb Sphere Problem Determination Ext
Web Sphere Problem Determination ExtRohit Kelapure
 
HTTP Session Replication with Oracle Coherence, GlassFish, WebLogic
HTTP Session Replication with Oracle Coherence, GlassFish, WebLogicHTTP Session Replication with Oracle Coherence, GlassFish, WebLogic
HTTP Session Replication with Oracle Coherence, GlassFish, WebLogicOracle
 
Introduction to node js - From "hello world" to deploying on azure
Introduction to node js - From "hello world" to deploying on azureIntroduction to node js - From "hello world" to deploying on azure
Introduction to node js - From "hello world" to deploying on azureColin Mackay
 
Architectures, Frameworks and Infrastructure
Architectures, Frameworks and InfrastructureArchitectures, Frameworks and Infrastructure
Architectures, Frameworks and Infrastructureharendra_pathak
 

Similar a XPages Performance (20)

Life in the Fast Lane: Full Speed XPages!, #dd13
Life in the Fast Lane: Full Speed XPages!, #dd13Life in the Fast Lane: Full Speed XPages!, #dd13
Life in the Fast Lane: Full Speed XPages!, #dd13
 
On-boarding with JanusGraph Performance
On-boarding with JanusGraph PerformanceOn-boarding with JanusGraph Performance
On-boarding with JanusGraph Performance
 
node.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoonnode.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoon
 
WildFly AppServer - State of the Union
WildFly AppServer - State of the UnionWildFly AppServer - State of the Union
WildFly AppServer - State of the Union
 
Krug Fat Client
Krug Fat ClientKrug Fat Client
Krug Fat Client
 
Server Side Javascript
Server Side JavascriptServer Side Javascript
Server Side Javascript
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
 
Drupalcamp Estonia - High Performance Sites
Drupalcamp Estonia - High Performance SitesDrupalcamp Estonia - High Performance Sites
Drupalcamp Estonia - High Performance Sites
 
Drupalcamp Estonia - High Performance Sites
Drupalcamp Estonia - High Performance SitesDrupalcamp Estonia - High Performance Sites
Drupalcamp Estonia - High Performance Sites
 
Docker based Architecture by Denys Serdiuk
Docker based Architecture by Denys SerdiukDocker based Architecture by Denys Serdiuk
Docker based Architecture by Denys Serdiuk
 
Developing High Performance Web Apps - CodeMash 2011
Developing High Performance Web Apps - CodeMash 2011Developing High Performance Web Apps - CodeMash 2011
Developing High Performance Web Apps - CodeMash 2011
 
Know More About Rational Performance - Snehamoy K
Know More About Rational Performance - Snehamoy KKnow More About Rational Performance - Snehamoy K
Know More About Rational Performance - Snehamoy K
 
3 know more_about_rational_performance_tester_8-1-snehamoy_k
3 know more_about_rational_performance_tester_8-1-snehamoy_k3 know more_about_rational_performance_tester_8-1-snehamoy_k
3 know more_about_rational_performance_tester_8-1-snehamoy_k
 
Drupal performance
Drupal performanceDrupal performance
Drupal performance
 
Web Sphere Problem Determination Ext
Web Sphere Problem Determination ExtWeb Sphere Problem Determination Ext
Web Sphere Problem Determination Ext
 
Jsp
JspJsp
Jsp
 
Liberty Deep Dive
Liberty Deep DiveLiberty Deep Dive
Liberty Deep Dive
 
HTTP Session Replication with Oracle Coherence, GlassFish, WebLogic
HTTP Session Replication with Oracle Coherence, GlassFish, WebLogicHTTP Session Replication with Oracle Coherence, GlassFish, WebLogic
HTTP Session Replication with Oracle Coherence, GlassFish, WebLogic
 
Introduction to node js - From "hello world" to deploying on azure
Introduction to node js - From "hello world" to deploying on azureIntroduction to node js - From "hello world" to deploying on azure
Introduction to node js - From "hello world" to deploying on azure
 
Architectures, Frameworks and Infrastructure
Architectures, Frameworks and InfrastructureArchitectures, Frameworks and Infrastructure
Architectures, Frameworks and Infrastructure
 

Más de Ulrich Krause

What is new in Notes & Domino Deleopment V10.x
What is new in Notes & Domino Deleopment V10.xWhat is new in Notes & Domino Deleopment V10.x
What is new in Notes & Domino Deleopment V10.xUlrich Krause
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondUlrich Krause
 
DNUG ak-anwendungsentwicklung.18042011
DNUG ak-anwendungsentwicklung.18042011DNUG ak-anwendungsentwicklung.18042011
DNUG ak-anwendungsentwicklung.18042011Ulrich Krause
 
When Plato Left The Cave - A brief history of Lotus Notes
When Plato Left The Cave - A brief history of Lotus NotesWhen Plato Left The Cave - A brief history of Lotus Notes
When Plato Left The Cave - A brief history of Lotus NotesUlrich Krause
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & DominoUlrich Krause
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code CookbookUlrich Krause
 
AdminCamp2010, Closing General Session
AdminCamp2010, Closing General SessionAdminCamp2010, Closing General Session
AdminCamp2010, Closing General SessionUlrich Krause
 
Keine Angst vor Sametime 8.5.1
Keine Angst vor Sametime 8.5.1Keine Angst vor Sametime 8.5.1
Keine Angst vor Sametime 8.5.1Ulrich Krause
 
Compact, Compress, De-DUplicate
Compact, Compress, De-DUplicateCompact, Compress, De-DUplicate
Compact, Compress, De-DUplicateUlrich Krause
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for BeginnersUlrich Krause
 

Más de Ulrich Krause (13)

What is new in Notes & Domino Deleopment V10.x
What is new in Notes & Domino Deleopment V10.xWhat is new in Notes & Domino Deleopment V10.x
What is new in Notes & Domino Deleopment V10.x
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
 
DNUG ak-anwendungsentwicklung.18042011
DNUG ak-anwendungsentwicklung.18042011DNUG ak-anwendungsentwicklung.18042011
DNUG ak-anwendungsentwicklung.18042011
 
When Plato Left The Cave - A brief history of Lotus Notes
When Plato Left The Cave - A brief history of Lotus NotesWhen Plato Left The Cave - A brief history of Lotus Notes
When Plato Left The Cave - A brief history of Lotus Notes
 
EntwicklerCamp CGS
EntwicklerCamp CGSEntwicklerCamp CGS
EntwicklerCamp CGS
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & Domino
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code Cookbook
 
Ccd
CcdCcd
Ccd
 
AdminCamp2010, Closing General Session
AdminCamp2010, Closing General SessionAdminCamp2010, Closing General Session
AdminCamp2010, Closing General Session
 
Keine Angst vor Sametime 8.5.1
Keine Angst vor Sametime 8.5.1Keine Angst vor Sametime 8.5.1
Keine Angst vor Sametime 8.5.1
 
Compact, Compress, De-DUplicate
Compact, Compress, De-DUplicateCompact, Compress, De-DUplicate
Compact, Compress, De-DUplicate
 
Daos
DaosDaos
Daos
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for Beginners
 

Último

Q1 Quarterly Update - April 16, 2024.pdf
Q1 Quarterly Update - April 16, 2024.pdfQ1 Quarterly Update - April 16, 2024.pdf
Q1 Quarterly Update - April 16, 2024.pdfProbe Gold
 
slideshare_2404_presentation materials_en.pdf
slideshare_2404_presentation materials_en.pdfslideshare_2404_presentation materials_en.pdf
slideshare_2404_presentation materials_en.pdfsansanir
 
Corporate Presentation Probe April 2024.pdf
Corporate Presentation Probe April 2024.pdfCorporate Presentation Probe April 2024.pdf
Corporate Presentation Probe April 2024.pdfProbe Gold
 
Corporate Presentation Probe April 2024.pdf
Corporate Presentation Probe April 2024.pdfCorporate Presentation Probe April 2024.pdf
Corporate Presentation Probe April 2024.pdfProbe Gold
 
WheelTug PLC Pitch Deck | Investor Insights | April 2024
WheelTug PLC Pitch Deck | Investor Insights | April 2024WheelTug PLC Pitch Deck | Investor Insights | April 2024
WheelTug PLC Pitch Deck | Investor Insights | April 2024Hector Del Castillo, CPM, CPMM
 
如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书
如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书
如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书Fir La
 
The Concept of Humanity in Islam and its effects at future of humanity
The Concept of Humanity in Islam and its effects at future of humanityThe Concept of Humanity in Islam and its effects at future of humanity
The Concept of Humanity in Islam and its effects at future of humanityJohanAspro
 
the 25 most beautiful words for a loving and lasting relationship.pdf
the 25 most beautiful words for a loving and lasting relationship.pdfthe 25 most beautiful words for a loving and lasting relationship.pdf
the 25 most beautiful words for a loving and lasting relationship.pdfFrancenel Paul
 
Basic Accountants in|TaxlinkConcept.pdf
Basic  Accountants in|TaxlinkConcept.pdfBasic  Accountants in|TaxlinkConcept.pdf
Basic Accountants in|TaxlinkConcept.pdftaxlinkcpa
 
Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024
Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024
Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024Osisko Gold Royalties Ltd
 
The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...
The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...
The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...Kumaran637735
 
Nicola Mining Inc. Corporate Presentation April 2024
Nicola Mining Inc. Corporate Presentation April 2024Nicola Mining Inc. Corporate Presentation April 2024
Nicola Mining Inc. Corporate Presentation April 2024nicola_mining
 
如何办理东俄勒冈大学毕业证(文凭)EOU学位证书
如何办理东俄勒冈大学毕业证(文凭)EOU学位证书如何办理东俄勒冈大学毕业证(文凭)EOU学位证书
如何办理东俄勒冈大学毕业证(文凭)EOU学位证书Fir La
 
如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书
如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书
如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书Fir La
 
9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR
9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR
9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCRSapana Sha
 
9654467111 Call Girls In Katwaria Sarai Short 1500 Night 6000
9654467111 Call Girls In Katwaria Sarai Short 1500 Night 60009654467111 Call Girls In Katwaria Sarai Short 1500 Night 6000
9654467111 Call Girls In Katwaria Sarai Short 1500 Night 6000Sapana Sha
 

Último (20)

Q1 Quarterly Update - April 16, 2024.pdf
Q1 Quarterly Update - April 16, 2024.pdfQ1 Quarterly Update - April 16, 2024.pdf
Q1 Quarterly Update - April 16, 2024.pdf
 
slideshare_2404_presentation materials_en.pdf
slideshare_2404_presentation materials_en.pdfslideshare_2404_presentation materials_en.pdf
slideshare_2404_presentation materials_en.pdf
 
young call girls in Hauz Khas,🔝 9953056974 🔝 escort Service
young call girls in Hauz Khas,🔝 9953056974 🔝 escort Serviceyoung call girls in Hauz Khas,🔝 9953056974 🔝 escort Service
young call girls in Hauz Khas,🔝 9953056974 🔝 escort Service
 
Corporate Presentation Probe April 2024.pdf
Corporate Presentation Probe April 2024.pdfCorporate Presentation Probe April 2024.pdf
Corporate Presentation Probe April 2024.pdf
 
young call girls in Govindpuri 🔝 9953056974 🔝 Delhi escort Service
young call girls in Govindpuri 🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Govindpuri 🔝 9953056974 🔝 Delhi escort Service
young call girls in Govindpuri 🔝 9953056974 🔝 Delhi escort Service
 
Corporate Presentation Probe April 2024.pdf
Corporate Presentation Probe April 2024.pdfCorporate Presentation Probe April 2024.pdf
Corporate Presentation Probe April 2024.pdf
 
WheelTug PLC Pitch Deck | Investor Insights | April 2024
WheelTug PLC Pitch Deck | Investor Insights | April 2024WheelTug PLC Pitch Deck | Investor Insights | April 2024
WheelTug PLC Pitch Deck | Investor Insights | April 2024
 
如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书
如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书
如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书
 
The Concept of Humanity in Islam and its effects at future of humanity
The Concept of Humanity in Islam and its effects at future of humanityThe Concept of Humanity in Islam and its effects at future of humanity
The Concept of Humanity in Islam and its effects at future of humanity
 
the 25 most beautiful words for a loving and lasting relationship.pdf
the 25 most beautiful words for a loving and lasting relationship.pdfthe 25 most beautiful words for a loving and lasting relationship.pdf
the 25 most beautiful words for a loving and lasting relationship.pdf
 
Basic Accountants in|TaxlinkConcept.pdf
Basic  Accountants in|TaxlinkConcept.pdfBasic  Accountants in|TaxlinkConcept.pdf
Basic Accountants in|TaxlinkConcept.pdf
 
Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024
Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024
Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024
 
The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...
The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...
The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...
 
Nicola Mining Inc. Corporate Presentation April 2024
Nicola Mining Inc. Corporate Presentation April 2024Nicola Mining Inc. Corporate Presentation April 2024
Nicola Mining Inc. Corporate Presentation April 2024
 
如何办理东俄勒冈大学毕业证(文凭)EOU学位证书
如何办理东俄勒冈大学毕业证(文凭)EOU学位证书如何办理东俄勒冈大学毕业证(文凭)EOU学位证书
如何办理东俄勒冈大学毕业证(文凭)EOU学位证书
 
young Call girls in Dwarka sector 1🔝 9953056974 🔝 Delhi escort Service
young Call girls in Dwarka sector 1🔝 9953056974 🔝 Delhi escort Serviceyoung Call girls in Dwarka sector 1🔝 9953056974 🔝 Delhi escort Service
young Call girls in Dwarka sector 1🔝 9953056974 🔝 Delhi escort Service
 
如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书
如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书
如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书
 
9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR
9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR
9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR
 
young call girls in Yamuna Vihar 🔝 9953056974 🔝 Delhi escort Service
young  call girls in   Yamuna Vihar 🔝 9953056974 🔝 Delhi escort Serviceyoung  call girls in   Yamuna Vihar 🔝 9953056974 🔝 Delhi escort Service
young call girls in Yamuna Vihar 🔝 9953056974 🔝 Delhi escort Service
 
9654467111 Call Girls In Katwaria Sarai Short 1500 Night 6000
9654467111 Call Girls In Katwaria Sarai Short 1500 Night 60009654467111 Call Girls In Katwaria Sarai Short 1500 Night 6000
9654467111 Call Girls In Katwaria Sarai Short 1500 Night 6000
 

XPages Performance

  • 1. Entwicklercamp 2013 Full Speed XPages Performanceoptimierung 11. – 13..03.2013 Maritim Hotel, Gelsenkirchen Ulrich Krause, BCC Unternehmensberatung GmbH
  • 2. Über: Ulrich Krause  Lotus Notes / Domino Administrator & Entwickler seit 1993  Senior Software Architect  OpenNTF Contributor  OpenNTF Board of Directors  IBM Champion 2011/2012/2013  Blog http://www.eknori.de  Notes Forum (http://www.atnotes.de)
  • 3. Agenda  Performance, was kann bremsen ?  Java vs. JavaScript  Daten vorbereiten, ViewNavigator vs. GetNextDocument  Stringbuilder vs. Concat (+)  JSF Lifecycle Listener  Partial Update / Partial Execute  Variable Resolver  Werkzeuge
  • 5. Hardware  Die verwendete Hardware hat einen nicht unerheblichen Einfluß auf die Performance. Es gibt 3 Kernelemente • CPU • Arbeitsspeicher • Festplatten
  • 6. 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”
  • 7. 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
  • 8. 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
  • 9. XPages Design Optimizations  Berechnungen während der JSF Lifecycle Phasen reduzieren • Wenn möglich, partial update verwenden • Wenn möglich, partial execute verwenden • Wenn möglich, disableValidators & immediate verwenden  Berechnungen für „Sichtbar“ reduzieren • „Loaded“ Eigenschaft verwenden um „Rendered“ zu berechnen • Ergebnis der Berechnung zwischenspeichern ( scopedVariable) • VariableResolver verwenden  Repeats & Views • viewEntry.getColumnValue antelle von viewEntry.getDocument.getColumn • View data source dataCache property
  • 10. 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
  • 11. 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
  • 12. General Performance options  notes.ini • HTTPJVMMaxHeapSizeSet=1 • HTTPJVMMaxHeapSize=256M • sollte auf ¼ des verfügbaren RAM gesetzt werden  Domino Administrator • HTTP server "Enable logging to" disabled • HTTP server thread count – defaults to 40  Generell hat das Debug Einfluß auf die Performance • JavaEnableDebug=1 • JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=800 0 • JavascriptEnableDebug=1 ( ab Version 9 )
  • 13. Reducing Memory Utilization  xsp.persistence.mode=  Defines the persistence mode for the JSF pages • file: All the pages are persisted on disk • fileex: All the pages are persisted on disk except the current one, which stays in memory • <else>: All the pages stay in memory (tree mode)
  • 14. XPages Design Optimizations  Loadtime vs Runtime • Loaded vs Rendered • ExtLib Dynamic Content • allows partial re-loading so more use of load-time optimizations  CSS & browser JS • Kein inline CSS / JS • Auslagern in entsprechende Designelemente • Dateien so klein wie möglich halten  Bilder • Größe nicht zur Laufzeit berechnen • CSS Image Sprites verwenden, wenn möglich
  • 15. 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 Auf dem Server: xsp.properties: xsp.resources.aggregate=true
  • 17. XPages Pre-Load  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
  • 18. XPages Pre-Load • XPagesPreloadDB=Server!!Db.nsf/XPage.xsp, myLocalDb.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
  • 19. Scoped Variables  applicationScope • Are visible for all users of one application. Expires some time after the last user used an applicationScope variable. That means applicationScope variables are NOT persistent forever.  sessionScope • Is valid through the session of the current user. A user session expires after some time of inactivity. Uses don't have access to the sessionScope variables of other users.  viewScope • Is visible for views on the current page only. Useful for transporting a search query to a view.  requestScope • Is valid through one request of the current user. That includes refreshing of a page.
  • 21. JAVA Design Element (8.5.3)  A Java design element is created just like you create any other design element.  Categorization in the Designer views is shown by using the "/" character to demark levels  In the virtual file system, the class file appears separate from the .java file, under WebContentWEB-INFclasses
  • 22. JAR Design Element ( V9 )  Work with packaged Java code/libraries that are included in the application NSF  Frees you from having to deploy the JARS to a server and/or include the source files uniquely in the application database  Automatically manages the classpath and places the JAR file into web-inf/lib  Only available to XPages applications • automatically loaded by the XPages runtime
  • 23. When to Execute - # vs $  # • Wird jedes Mal ausgeführt, wenn die Seite gerendert wird • Wenn Werte sich ändern. (Computed values / Abhängigkeiten )  $ • Wird nur beim ersten Seitenaufbau ausgeführt. • Wenn sich Werte nicht ändern ( Label )
  • 24. DataContext  dataContexts can be thought of as global variables  dataContext's value can be computed dynamically or on page load • So you can use ${javascript:@Today()} and run it once rather than running a function each time.  dataContexts can be scoped to any level that datasources can • XPage, Custom Control or Panel • you can set a dataContext in a panel in a repeat control, to avoid multiple references to a NotesDocument's item  dataContexts are referenced using EL • So at no point in the references do you run SSJS, so it's not having to go through the SSJS parser
  • 25. DataContext - Pitfall  Problem beim data context und dynamischen binding • They will be recomputed again and again, even when in Partial Execution mode and if they are not in use (http://hasselba.ch/blog/?p=1112)
  • 27.
  • 30. XPages Lifecycle Listener  Was passiert in den einzelnen Phasen des JSF Lifecycle Ulrich Krause: http://openntf.org/XSnippets.nsf/snippet.xsp?id=a-simple-lifecyclelistener-
  • 31. 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
  • 32. Partial Refresh / Update (Contra)  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 http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-84B6VP
  • 33. Partial Execution  Reduced control processing in the 3 data-processing phases • Means less work on the server, faster response times  Dependancy on Edit Box values outside of the exec area • Submitted values from Edit Boxes and/or other input controls in other areas of the control tree are not processed, so any control values and document fields in those other areas will not be updated. 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.  onclick Event Handler must be in the exec area • The applyRequestValues phase prepares for the invokeApplication phase.The onclick simple action or SSJS script won't occur if outside the partial exec area
  • 34. Partial Execution  execMode erst ab 8.5.1  Setzen der execId in V8.5.1 und V9
  • 35. disableValidators / immediate  disableValidators • JSF Lifecycle durchläuft alle Phasen (1-6) • es findet aber keine Validierung der Daten statt • Converters funktionieren weiterhin. • Items 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 • Items in Dokumenten werden nicht aktualisiert • Event Handler onclick scripts und renderResponse Berechnungen werden ausgeführt
  • 36. Minimize work in rendered/ visible computation  Most properties, like CSS “style” are only computed in the renderResponse  Edit Box and input “value” properties are used in Data Processing phases & renderResponse  Data Source properties are computed during renderResponse & results are cached for the next request's Data Processing & invokeApplication phases
  • 37. Minimize work in rendered / visible computation  The rendered property is computed in all 5 lifecycle phases  Avoid re-computing values in every rendered property • @DbLookup, @DbColumn, getDocumentByKey • In the rendered property, save the computed boolean to a viewScope variable
  • 38. Using loaded vs rendered  Loaded • is only computed once in the createView phase • not re-computed in the 5 usual phases • false means the control is not created. So it can never be rendered. • true means the control is added to the control tree. • You can still compute rendered when loaded evaluates to true.  Compute the loaded property on conditions • where you could compute the rendered property and save it to the view scope • it would never need to be recomputed for the rest of the interaction with this page
  • 39. Images  Use correct file type depending on content • JPEG for complexed detailed images • PNG/GIF for simple images, fonts, transparencies • Use the HTML <img tag “width” and “height” attributes • For faster HTML layout in the browser • Size the image to size you intend to use • Resizing using html attributes height and width will delay the rendering of your page • Images larger than necessary will waste bandwidth
  • 40. CSS Image Sprites  Use CSS Image Sprites • If you have multiple small images, make a single larger image containing the smaller images • And use CSS to display just the relevant subset image at a llocation in the page • For semantically significant sprites, provide an accessibility “title” attribut (as sprites don't use the IMG “alt” attribute, but you still want to assist blind users) • There's no specific XPages support for sprites, but they're used in the XPages OneIU themes
  • 41. CSS Image Sprite Sample http://www.w3schools.com/css/tryit.asp?filename=trycss_sprites_img
  • 42. XPages Toolbox  XPages based Application • Runs on the Domino server or the Notes client • An NSF needs to be installed on the Domino server/Notes client • A profiler jar file should be added to the JVM launch options  Measures the CPU performance and the memory allocation  Available from OpenNTF.org • Free open source project • Search for “XPages Toolbox”  Extended in 8.5.2 to support Backend classes profiling http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=XPages%20Toolbox
  • 44. XPages Toolbox  Generate a heap dump of the JVM running in the HTTP task • A button in the XPages profiler generates the heap dump • From the Domino console • tell http xsp heapdump (triggers com.ibm.jvm.Dump.HeapDump()) • tell http xsp javadump (triggers com.ibm.jvm.Dump.JavaDump())  Analyze the heap dump using the Eclipse memory analyzer • http://www.eclipse.org/mat/ • http://www.ibm.com/developerworks/java/jdk/tools/dtfj.html  HTTPJVMMaxHeapSizeSet=1  HTTPJVMMaxHeapSize=256M
  • 46. More Tools  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 • Heap memory usage will be a subset of process memory, but heap dumps are only a snapshot
  • 47. More Tools  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 objects, step into code. • Use the Eclipse Java debugger. • In Dominonotes.ini add these 2 options: • JavaEnableDebug=1 • JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000
  • 48. Demo
  • 49. JSON Daten { "@unid":"00065A23B16A0E5EC1257AEB00315D53", "FirstName":"Concetta", "LastName":"Galloway", "State":"AZ", "City":"Mesa" }, { "@unid":"000C0B447A8D3FEBC1257AEB00314648", "FirstName":"Annmarie", "LastName":"Crosby", "State":"TX", "City":"El Paso" }, ...
  • 50. XAgent – SSJS  Get all „Contacts“ into a NotesDocumentCollection, loop the collection and build the JSON by reading the values from items in the document
  • 52. XAgent – SSJS – UNID from Item  Get all „Contacts“ into a NotesDocumentCollection, loop the collection and build the JSON by reading the values from items in the document. Also UNID is stored in document
  • 53. XAgent – SSJS – UNID from Item
  • 54. XAgent – SSJS - SingleItem  Get all „Contacts“ into a NotesDocumentCollection, loop the collection and get the JSON from an item on the document. The JSON is calculated on document save
  • 55. XAgent – SSJS - SingleItem
  • 56. XAgent – SSJS – ViewNavigator  loop thru a view and get the JSON from a view column.
  • 57. XAgent – SSJS – ViewNavigator
  • 58. 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 String text= System.out.println("x:"+x+" y:"+y); "line 1n"+ "line 2n"+ "line 3";
  • 59. StringBuilder vs String.concat  When to use StringBuilder over '+' (String.concat()) ? • use StringBuilder whenever you assemble a String in a loop • Just keep in mind that '+' isn't always a good idea http://kaioa.com/node/59
  • 60. XAgent – SSJS – ViewNavigator + StringBuilder  loop thru a view and get the JSON from a view column. Use a StringBuilder to concat the JSON
  • 61. XAgent – SSJS – ViewNavigator + StringBuilder
  • 62. XAgent – Java  loop thru a view and get the JSON from a view column. Use a StringBuilder to concat the JSON + use Java instead of SSJS
  • 64. Themes  Single Document Containing References to all your CSS Resources • resource sections reference the CSS files used • 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 • built-in themes to extend • webstandard, notes, oneUI
  • 65. Themes  Create your own themes from scratch.  Creating a theme that extends from the webstandard or another supplied theme will include extra stylesheets and styles that you might not need.  Be prepared to spend more time writing css though
  • 66. Ressourcen im Theme laden  Global Application / Configuration properties
  • 67. Q+A • Mail: eknori@eknori.de • Blog: http://www.eknori.de • Sametime: bleedyellow.com • Twitter: eknori

Notas del editor

  1. Change the server page persistence setting to keep the current page in memory. Strictly speaking, keeping all pages in memory provides the best performance, but it tends to be downright wasteful of memory. When only the current page is kept in memory, as a user navigates from page to page (as opposed to firing events against the page they&apos;re already on... even if it&apos;s a full refresh event), it serializes the state of the previous page to disk. If a subsequent event is fired against that previous page, then that page&apos;s state is retrieved from disk and loaded back into memory.  But this scenario only occurs if the application loads a new page in a new window or tab, and the user later switches back to the original window and interacts with it again. In typical navigation scenarios, once the user has opened a new page, the previous page instance no longer exists... even if they navigate back to the same page again, it&apos;s a new instance   of that page. Hence, keeping all pages in memory essentially guarantees at least a temporary memory leak. All of that storage is eventually released, of course, but in the meantime the server is consuming memory it will never need again that would be better served storing whatever you&apos;re explicitly caching in scope variables.
  2. JavaScript/CSS Aggregation feature For performance reasons, the XPages runtime now features a new option that dynamically aggregates multiple Dojo modules, or multiple CSSs into a single file. This results in the following performance improvements:a decrease in requests sent from the browser to the server an increase in user performance, particularly in the context of networks with high latency an increase in the speed of JS/CSS parsing from the browser the freeing up of server connections to fulfill other requests As an extreme example of the saving, let&apos;s say the XPages Extension Library is using the page DWA_ListView.xsp. Without the aggregator enabled, 82 requests are made to the server. With the aggregator enabled, the count decreases to 6 requests, including the Ajax request that gets the data. Also, a test run on processing time might see changes from ~4 sec to ~800 ms. To allow you to actvate this option, XPages now feature a new runtime option, which can be set in xsp.properties (database or server level). This option is xsp.resources.aggregate=true It can also be set in Domino Designer from the Application Properties - XPages tab by checking the Use runtime optimized JavaScript and CCS resources option.
  3. XPages Preload options New options designed to improve the startup performance of XPages applications have been added to this release. A preference can be set that preloads the XPages runtime on the Domino server and Notes client. Additionally, specific XPages applications may also be preloaded. The preferences are set as entries in the NOTES.INI file and have the following form: XPagesPreload=1 XPagesPreloadDB=myServer!!myDb.nsf/myXPage.xsp,myLocalDb.nsf/test.xsp The XPagesPreload entry causes an extensive list of XPages runtime Java classes to be preloaded, so they are available in memory when an application is opened by a user. The XPagesPreloadDB preference lets a comma separated list of applications be specified, with or without a specific XPage extension. Again, any required classes are loaded when the server or client starts up and are thus available as soon as any declared application is accessed by a user. The benefit of this may be more evident when running in remote mode on the Notes client, i.e. the XPages is running on the client but the application itself resides on a remote server. In this instance, the Java classes in the application (XPages, custom controls) need to be loaded across the network in order to be executed in the local XPD web container. Preloading such applications produces more responsive initial user experience.
  4. First and foremost, become intimately familiar with the so-called &quot;scope variables&quot;. The nature and use of these are documented in detail elsewhere, so I won&apos;t belabor that here. But the better you understand what information is appropriate to store in each scope - and that you can store complex object structures, not just &quot;string-to-string&quot; mapping - and the more you take advantage of this, the faster the application&apos;s response will be. This is because you&apos;re limiting disk I/O as much as possible... the more frequently the application can just pull whatever data the user is requesting from RAM, instead of querying the database every time, the faster the application will be. This is why you want lots and lots of RAM. :) Of course, you don&apos;t want to be gratuitous with your memory storage, which is why it&apos;s crucial to understand which scope is appropriate for which type of data... when you get the hang of this, Domino will clean up these memory caches for you automatically.  If you find that you&apos;re running out of memory, but you&apos;re confident your scope storage is reasonably optimized, tweak the application properties to clear the application scope periodically. The higher the frequency you set, the more you can cache in all the scopes without bursting the heap... but if you find you&apos;re needing to set this to a frequency of less than an hour, revisit what you&apos;re actually storing, because it&apos;s probably out of control.
  5. Minimize the use of SSJS (server-side JavaScript). Every time any SSJS expression is evaluated, Domino parses the expression in realtime into an abstract syntax tree, then runs Java code that is a rough approximation of how the JavaScript specification states that code matching the detected syntax should run. The more you move your logic directly into true Java classes, the less expensive it is to execute, so it runs faster. Each time, this differential is minuscule, but aggregated over the entirety of a complex application, it adds up enough to be perceptible to end users. Even without moving your code to Java, however, you can reduce SSJS usage simply by making the most of EL (expression language). For instance, rather than binding an image&apos;s src attribute to:  &quot;#{javascript:return &apos;/&apos; + database.getFilePath() + &apos;/images/&apos; + currentDocument.getUniversalID() + &apos;/$FILE/&apos; currentDocument.getItemValueString(&apos;thumbnail&apos;);}&quot; ...you can intersperse standard EL expressions throughout an otherwise hardcoded string: &quot;/#{database.filePath}/images/#{currentDocument.universalID}/$FILE/#{currentDocument.thumbnail}&quot; Not only does this reduce (and, often, eliminate) the amount of quote escaping required, making the code easier to maintain, it&apos;s more efficient for the server to evaluate each expression. In the above example, it&apos;s actually slightly faster to evaluate those three separate EL expressions than to evaluate the single SSJS expression they replaced.
  6. Designer - JAR design element ­ A new JAR design element has been introduced in this release. The JAR design element gives you the ability to work with packaged Java code/libraries that are included in the application NSF. ­ This design element is only available to XPages applications, where the JAR is automatically loaded by the XPages runtime. This feature frees you from having to deploy the JARS to a server and/or include the source files uniquely in the application database. ­ While JAR files can be added to the NSF through the virtual system, the JAR design element automatically manages the classpath and places the JAR file into web-inf/lib, which is the recommended location for JAR files used in a J2EE application. ­ The JAR design element is found in the Application Navigator under Code, right next to the Java element.
  7. Wherever possible, change your expressions from dynamic bindings to page load bindings. This is just a fancy way of saying that ${database.title} is always better than #{database.title}. The $ means that the expression is only calculated once per page instance... # means it&apos;s recalculated as often as needed - sometimes several times within the same request, depending upon what value is bound to the expression. So obviously you can&apos;t just change all your expressions to $... input controls bound to form items, for instance, should remain #. But if you have computed text displaying the application&apos;s title (as in the above example), that value is obviously unlikely to change during any given page instance, so change it to a $ expression, and then the server only has to evaluate it once. Combine this optimization with thorough scope caching, and it&apos;s easy to see how this can really speed up page load times and event execution response. This gets particularly noticeable when dealing with repeat controls: each time a user navigates to the next page of a repeat, if that repeat&apos;s value is a # binding, it has to recalculate that value... change it to a $, and it only loads the collection once. Even if the event the user triggered has nothing to do with the repeat, the server has to recalculate all # bindings, so if the repeat&apos;s value is a #, it still has to pull the collection again even though the user wasn&apos;t explicitly interacting with the repeat.
  8. Restore View Um das Eingangs erwähnte Dialoggedächtnis zu realisieren ist es notwendig die (Formular)Zustände zu speichern und wiederherzustellen. Dabei werden zwei Fälle unterschieden: Beim erstmaligen Abruf einer Seite existiert noch kein View-Objekt. Daher muss eines erzeugt werden, in dem ein leerer Komponentenbaum angelegt und im FacesContext einhängt wird. Danach kann sofort zur Render Response-Phase gesprungen, da keine Verarbeitung von übergebene Werten etc. nötig ist. Sollte bereits ein Komponentenbaum im FacesContext existieren, so wird dieses View-Objekt geladen und mit Validatoren, Konvertern und Listenern verknüpft. Apply Request Values In dieser Phase werden die übertragenen Werten des Requests (also die Daten des abgeschickten Formulars) in den Komponentenbaum übernommen, also in den entsprechenden Komponenten gesetzt. ActionEvents werden hier generiert, z.B, das Drücken des Buttons durch den der Request erzeugt wurde. Dabei ist wichtig dass hier noch keine Änderung des Modells erfolgt, sondern nur die String-Werte vorbereitet werden. Process Validation Anhand von Konvertern (aber auch Renderern) werden die gespeicherten Werte der vorherigen Phase in die Zielformate (Modelldatentypen) überführt. Anschließend werden alle Werte der Komponenten mittels registrierter Validatoren überprüft. Im Fehlerfall werden dabei üblicherweise komponentenbezogene Meldungen generiert und es wird mit der Render Response-Phase fortgefahren. Wodurch dieselbe Seite gerendert wird, da ihr Komponentenbaum noch FacesContext liegt. Update Model Values Wenn bis hier hin kein Fehler auftrat, so werden die überprüften Werte in das Modell übernommen. Dabei werden ValueChangeEvents generiert, falls sich ein Wert geändert hat. Nach dieser Phase werden die registrierten Listener über Wertänderungen informiert. Invoke Application Alle Ereignisse der Anwendungsebene werden verarbeitet. So wird z.B. die nachfolgende Seite ermittelt und ihr Komponentenbaum im Kontext abgelegt. Nach dieser Phase werden alle registrierten ActionListener benachrichtigt. Render Response Der im Kontext befindliche Komponentenbaum wird ausgegeben. Dazu wird die encode-Methode jeder Komponente ausgeführt. Wird also die Phase Invoke Application übersprungen so erfolgt das Rendern derselben Seite. Process Events Zum einen werden die für Events registrierte Listener benachrichtigt, als auch PhaseListener benachrichtigt. Letztere können den Ablauf beeinflusse oder nebenläufige Tätigkeiten angestoßen (z.B. Logging). Generell wird bei schweren Fehlern die Verarbeitung abgebrochen (Response Complete) oder vorzeitig eine Ausgabe erzeugt (Render Response).
  9. will tend to see out-of-date values. To see up-to-date but not-converted values use: var editBox1 = getComponent(&apos;editBox1&apos;); var value = editBox1.getSubmittedValue(); if( null == value ) value = editBox1.getValue();