SlideShare a Scribd company logo
1 of 68
AD103 - Life In the Fast Lane
Ulrich Krause, Indianapolis, August 22, 2013
Full Speed XPages !
AD103 - Life in the Fast Lane – Full Speed
XPages!
About: Ulrich Krause
Administrator /Developer since 1993
Senior Software Architect at BCC
OpenNTF Contributor
OpenNTF Board of Directors
Blog http://www.eknori.de
IBM Champion 2011/2012/2013
Notes Forum (http://www.atnotes.de)
AD103 - Life in the Fast Lane – Full Speed
XPages!
Agenda
What factors affect Performance?
Java vs. JavaScript
ViewNavigator vs. GetNextDocument
Stringbuilder vs. Concat (+)
JSF Lifecycle Listener
Partial Update / Partial Execute
Variable Resolver
Tools
AD103 - Life in the Fast Lane – Full Speed
XPages!
XPages Request
AD103 - Life in the Fast Lane – Full Speed
XPages!
Hardware
The hardware used has a significant influence on
performance. There are 3 key elements:
• CPU
• Main Memory
• Hard Disk
AD103 - Life in the Fast Lane – Full Speed
XPages!
Hardware
Main Memory
• Limit defined by the operating system
•  Scalability
CPU
• Cores / Clock / Cache
•  Poor response time
Weak CPU AND Low Memory
• Poor overall performance
• Poor response times
• Server "hangs"
AD103 - Life in the Fast Lane – Full Speed
XPages!
Network
Latency
• Time taken for data transmission between multiple
computers on a network
Bandwidth
• Rate of transmission of data
Greater Bandwidth
+ Lower Latency
--------------------------------
= Better Connection
AD103 - Life in the Fast Lane – Full Speed
XPages!
Client & Browser
Hardware
How many data requests / responses are
transmitted
How much data is transferred (size)
Caching of resources
How much CSJS runs
Size / complexity of the CSS
Complexity of the site structure
AD103 - Life in the Fast Lane – Full Speed
XPages!
Limiting factors on performance
Browser / HTTP server
• Network latency – distance/time to server.
• Bandwidth – size of files.
• Browser limits on concurrent downloads
• IE7 allows 2 downloads, IE8 allows 6
HTTP Server / App Server
• HTTP Server JVM heap size & garbage collector
• CPU time, competition between threads, gives slower
response times
• Threads, limited to 40 by default
AD103 - Life in the Fast Lane – Full Speed
XPages!
Limiting factors on performance
App Server / Domino context
• Read design elements from the NSF (XPage .class
files, form structure, etc)
• Backend API calls may be expensive, especially for large
data sets.
• Design elements may be network requests.
AD103 - Life in the Fast Lane – Full Speed
XPages!
Limiting factors on performance
Servlet / Lifecycle
• Restore control tree – file system read. Control tree
locking – no concurrent access.
• Rendered re-evaluated for every control for most phases
Browser/Client JavaScript/Dojo
• Inline JavaScript blocks insertion of later HTML elements
into the DOM tree
• Dojo does AJAX requests for .js files for dojo modules
that are not loaded
AD103 - Life in the Fast Lane – Full Speed
XPages!
General Performance Options
notes.ini
• HTTPJVMMaxHeapSizeSet=1
• HTTPJVMMaxHeapSize=256M
• Should be set to ¼ of the available RAM
Domino Administrator
• HTTP server "Enable logging to" disabled
• HTTP server thread count – defaults to 40
Remember, enabling the debugger affects
performance
• JavaEnableDebug=1
• JavaDebugOptions=transport=dt_socket,server=y,suspe
nd=n,address=8000
• JavascriptEnableDebug=1
AD103 - Life in the Fast Lane – Full Speed
XPages!
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)
AD103 - Life in the Fast Lane – Full Speed
XPages!
XPages Design Optimizations
Use Simple actions vs links or button with
window.location JS
Reduce server phase processing
• Use partial update where possible
• Use partial execute where possible
• Use disableValidators & immediate event
Minimize work in rendered / visible computations
• Use variable resolver
When using Repeats & Views
• Use viewEntry.getColumnValue instead of
viewEntry.getDocument.getColumn
• Use Domino View data source dataCache property where
possible
AD103 - Life in the Fast Lane – Full Speed
XPages!
XPages Design Optimizations
Load-time vs Runtime
• Using loaded vs rendered
• ExtLib Dynamic Content
• allows partial re-loading, so more use of load-time optimizations
Loading resources in the browser
• CSS & browser JS
• extract to separate files. Minify & compress files
• Images
• use correct size & format. Use CSS Image Sprites as possible
AD103 - Life in the Fast Lane – Full Speed
XPages!
JavaScript/CSS Aggregation
Groups many DOJO, CSS / JS files into a single
file
• Less requests from the browser to the server
• Performance improvements on networks with high
latency
• Enhanced performance parsing CSS / JS
• Fewer connections to the server
On the Server: xsp.properties:
xsp.resources.aggregate=true
AD103 - Life in the Fast Lane – Full Speed
XPages!
JavaScript/CSS Aggregation
AD103 - Life in the Fast Lane – Full Speed
XPages!
XPages PreLoad
XPagesPreload=1
New Feature in Notes / Domino 8.5.3
Works on Server and 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
AD103 - Life in the Fast Lane – Full Speed
XPages!
XPages PreLoad
XPagesPreloadDB =
Server!!Db.nsf/XPage.xsp, myLocalDb.nsf
Works at the application level
The application is loaded on the client / server
startup into memory.
• This happens even when the application is first opened
in the browser
AD103 - Life in the Fast Lane – Full Speed
XPages!
XPages PreLoad (cont.)
For each entry in the notes.ini variable, an XPage
URL is generated and sent to the server
The application is loaded, and the HTML generated
The XPages runtime discards the HTML, but
retains the application in memory
AD103 - Life in the Fast Lane – Full Speed
XPages!
Scoped Variables
applicationScope
• Are visible for all users of one application.
• Expires some time after the last user used an
applicationScope variable.
• 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.
AD103 - Life in the Fast Lane – Full Speed
XPages!
Scoped Variables (cont.)
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.
AD103 - Life in the Fast Lane – Full Speed
XPages!
Caching with Application Scope
AD103 - Life in the Fast Lane – Full Speed
XPages!
JSF Lifecycle
AD103 - Life in the Fast Lane – Full Speed
XPages!
XPages Lifecycle Listener
What happens in each phase of the JSF lifecycle?
Ulrich Krause: http://openntf.org/XSnippets.nsf/snippet.xsp?id=a-simple-lifecyclelistener-
AD103 - Life in the Fast Lane – Full Speed
XPages!
XPages Masterclass
http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=XPages%20Master
class
AD103 - Life in the Fast Lane – Full Speed
XPages!
When to Execute - # vs $
#
• Executed every time the page is rendered
• Use for values that are likely to change
$
• Executed when the page is first loaded
• Use for values that don't change
AD103 - Life in the Fast Lane – Full Speed
XPages!
DataContext
Can be thought of as global variables
Value can be computed dynamically or on page
load
• You can use ${javascript:@Today()} and run it once
rather than running a function each time.
Can be scoped to any level that datasources can
• XPage, Custom Control or Panel
• Set a dataContext in a panel in a repeat control to avoid
multiple references to a NotesDocument's item
Is Referenced using EL
• At no point in the references do you run SSJS
• Not having to go through the SSJS parser
AD103 - Life in the Fast Lane – Full Speed
XPages!
DataContext - Pitfall
Do not bind data context variables dynamically.
• They will be recomputed again and again, even when in
partial execution mode and if they are not in use
AD103 - Life in the Fast Lane – Full Speed
XPages!
DataContext - Pitfall
AD103 - Life in the Fast Lane – Full Speed
XPages!
Partial Refresh / Update (Pro)
Reduced control processing in the render response
phase
• Means less work on the server
• RenderResponse is the most intensive phase
Smaller response from server.
• Means reduced network usage
Better browser experience
• Rest of the page is still visible while waiting for a
response
• Inserting small sections into the page is much faster than
reloading a full page.
AD103 - Life in the Fast Lane – Full Speed
XPages!
Partial Refresh / Update (Cons)
Dependancy outside of the partial update area
• Other areas of the control tree are not processed,so any
SSJS scripts in those other controls will not be run.
• Enabling Partial Update where it was previously full
update may lead to functional problems
Only one area may be partial updated by default
• In CSJS you can schedule later partial updates of related
areas, but any concurrent requests will wait for exclusive
access to the server-side control tree before processing
on the server
http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-
84B6VP
AD103 - Life in the Fast Lane – Full Speed
XPages!
Partial Refresh / Update (Cons)
Refreshing more than one target ID in a single
partial refresh event
• http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-
84B6VP
AD103 - Life in the Fast Lane – Full Speed
XPages!
Partial Execution
Reduced 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
AD103 - Life in the Fast Lane – Full Speed
XPages!
Partial Execution (cont.)
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
AD103 - Life in the Fast Lane – Full Speed
XPages!
Partial Execution
execMode added in 8.5.1 (not in 8.5.0)
execId slightly difficult to select in Designer
• Select your button, in the Outline view, toggle open the
button, select the child Event Handler control, then set
the execId property on the Event Handler.
• [Better UI proposed in Notes/Domino Next – in the Events tab]
AD103 - Life in the Fast Lane – Full Speed
XPages!
disableValidators / immediate
disableValidators
• JSF life cycle through all phases (1-6)
• But requests will not validate the data
• Converters continue to work.
• Items in documents will be updated
Immediate
• JSF Lifecycle processes only phases (1, 2, 6)
• No data processing
• Items in documents are not updated
• Onclick event handler scripts and render response
calculations are performed
AD103 - Life in the Fast Lane – Full Speed
XPages!
Minimize work in rendered/ visible
computationMost 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
AD103 - Life in the Fast Lane – Full Speed
XPages!
Minimize work in rendered / visible
computationThe 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
AD103 - Life in the Fast Lane – Full Speed
XPages!
Using loaded vs rendered
Loaded
• is only computed once in the createView phase
• not re-computed in the other 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
AD103 - Life in the Fast Lane – Full Speed
XPages!
Images
Use correct file type depending on content
• JPEG for complex and 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
AD103 - Life in the Fast Lane – Full Speed
XPages!
Image Sprites
Use CSS Image Sprites
• If you have multiple small images, make a single larger
image containing the smaller images
• Use CSS to display only the relevant subset image at a
location 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
AD103 - Life in the Fast Lane – Full Speed
XPages!
CSS Image Sprite Sample
http://www.w3schools.com/css/tryit.asp?filename=trycss_sprites_im
g
AD103 - Life in the Fast Lane – Full Speed
XPages!
XPages Toolbox
XPages based Application
• Runs on the Domino server or the Notes client
• An NSF needs to be installed on the server/Notes client
• A profiler jar file should be added to the JVM launch
options
Measures CPU performance and memory
allocation
Available from OpenNTF.org
• Free open source project
• http://www.openntf.org/internal/home.nsf/project.xsp?acti
on=openDocument&name=XPages%20Toolbox
AD103 - Life in the Fast Lane – Full Speed
XPages!
XPages Toolbox
AD103 - Life in the Fast Lane – Full Speed
XPages!
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.ht
ml
AD103 - Life in the Fast Lane – Full Speed
XPages!
Heapdump / Javadump Analyzer
AD103 - Life in the Fast Lane – Full Speed
XPages!
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
AD103 - Life in the Fast Lane – Full Speed
XPages!
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 objectsUse the
Eclipse Java debugger.
• In Dominonotes.ini add these 2 options:
• JavaEnableDebug=1
• JavaDebugOptions=transport=dt_socket,server=y,suspend=n,ad
dress=8000
AD103 - Life in the Fast Lane – Full Speed
XPages!
Optimization – Step By Step
AD103 - Life in the Fast Lane – Full Speed
XPages!
XAgent – SSJS
Get all „Contacts“ into a NotesDocumentCollection,
loop the collection and build the JSON by reading
the values from items in the document
AD103 - Life in the Fast Lane – Full Speed
XPages!
XAgent – SSJS
AD103 - Life in the Fast Lane – Full Speed
XPages!
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
AD103 - Life in the Fast Lane – Full Speed
XPages!
XAgent – SSJS – UNID from Item
AD103 - Life in the Fast Lane – Full Speed
XPages!
XAgent – SSJS - SingleItem
Get all „Contacts“ into a
NotesDocumentCollection, loop the collection and
get the JSON from an item on the document. JSON
is calculated on document save
AD103 - Life in the Fast Lane – Full Speed
XPages!
XAgent – SSJS - SingleItem
AD103 - Life in the Fast Lane – Full Speed
XPages!
XAgent – SSJS – ViewNavigator
loop thru a view and get the JSON from a view
column.
AD103 - Life in the Fast Lane – Full Speed
XPages!
XAgent – SSJS – ViewNavigator
AD103 - Life in the Fast Lane – Full Speed
XPages!
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
AD103 - Life in the Fast Lane – Full Speed
XPages!
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
AD103 - Life in the Fast Lane – Full Speed
XPages!
XAgent – SSJS – ViewNavigator +
StringBuilderloop thru a view and get the JSON from a view
column. Use a StringBuilder to concat the JSON
AD103 - Life in the Fast Lane – Full Speed
XPages!
XAgent – SSJS – ViewNavigator +
StringBuilder
AD103 - Life in the Fast Lane – Full Speed
XPages!
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
AD103 - Life in the Fast Lane – Full Speed
XPages!
XAgent – Java
AD103 - Life in the Fast Lane – Full Speed
XPages!
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
AD103 - Life in the Fast Lane – Full Speed
XPages!
Themes
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
AD103 - Life in the Fast Lane – Full Speed
XPages!
Load Resources from Themes
Global Application / Configuration properties
Feedback
ulrich_krause@bcc.biz
Questions ?

More Related Content

What's hot

From VMs to Containers: Introducing Docker Containers for Linux and Windows S...
From VMs to Containers: Introducing Docker Containers for Linux and Windows S...From VMs to Containers: Introducing Docker Containers for Linux and Windows S...
From VMs to Containers: Introducing Docker Containers for Linux and Windows S...Ido Flatow
 
Threading through InterBase, Firebird, and beyond
Threading through InterBase, Firebird, and beyondThreading through InterBase, Firebird, and beyond
Threading through InterBase, Firebird, and beyondMind The Firebird
 
JS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScript
JS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScriptJS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScript
JS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScriptJSFestUA
 
SenchaCon 2016: LinkRest - Modern RESTful API Framework for Ext JS Apps - Rou...
SenchaCon 2016: LinkRest - Modern RESTful API Framework for Ext JS Apps - Rou...SenchaCon 2016: LinkRest - Modern RESTful API Framework for Ext JS Apps - Rou...
SenchaCon 2016: LinkRest - Modern RESTful API Framework for Ext JS Apps - Rou...Sencha
 
[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the BasicsUlrich Krause
 
WebLogic Server Work Managers and Overload Protection
WebLogic Server Work Managers and Overload ProtectionWebLogic Server Work Managers and Overload Protection
WebLogic Server Work Managers and Overload ProtectionJames Bayer
 
Using ТРСС to study Firebird performance
Using ТРСС to study Firebird performanceUsing ТРСС to study Firebird performance
Using ТРСС to study Firebird performanceMind The Firebird
 
77739818 troubleshooting-web-logic-103
77739818 troubleshooting-web-logic-10377739818 troubleshooting-web-logic-103
77739818 troubleshooting-web-logic-103shashank_ibm
 
What is cool with Domino V10, Proton and Node.JS, and why would I use it in ...
What is cool with Domino V10, Proton and Node.JS, and why would I use it in ...What is cool with Domino V10, Proton and Node.JS, and why would I use it in ...
What is cool with Domino V10, Proton and Node.JS, and why would I use it in ...Heiko Voigt
 
Orphans, Corruption, Careful Write, and Logging
Orphans, Corruption, Careful Write, and LoggingOrphans, Corruption, Careful Write, and Logging
Orphans, Corruption, Careful Write, and LoggingMind The Firebird
 
"Building intuitive command-line interfaces in .NET", Alex Thissen
"Building intuitive command-line interfaces in .NET", Alex Thissen"Building intuitive command-line interfaces in .NET", Alex Thissen
"Building intuitive command-line interfaces in .NET", Alex ThissenFwdays
 
How to Use OWASP Security Logging
How to Use OWASP Security LoggingHow to Use OWASP Security Logging
How to Use OWASP Security LoggingMilton Smith
 
Introduction to Business Processes 3.7
Introduction to Business Processes 3.7Introduction to Business Processes 3.7
Introduction to Business Processes 3.7StephenKardian
 

What's hot (20)

XPages Performance
XPages PerformanceXPages Performance
XPages Performance
 
From VMs to Containers: Introducing Docker Containers for Linux and Windows S...
From VMs to Containers: Introducing Docker Containers for Linux and Windows S...From VMs to Containers: Introducing Docker Containers for Linux and Windows S...
From VMs to Containers: Introducing Docker Containers for Linux and Windows S...
 
WLST
WLSTWLST
WLST
 
Threading through InterBase, Firebird, and beyond
Threading through InterBase, Firebird, and beyondThreading through InterBase, Firebird, and beyond
Threading through InterBase, Firebird, and beyond
 
JS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScript
JS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScriptJS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScript
JS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScript
 
Supporting SQLserver
Supporting SQLserverSupporting SQLserver
Supporting SQLserver
 
SenchaCon 2016: LinkRest - Modern RESTful API Framework for Ext JS Apps - Rou...
SenchaCon 2016: LinkRest - Modern RESTful API Framework for Ext JS Apps - Rou...SenchaCon 2016: LinkRest - Modern RESTful API Framework for Ext JS Apps - Rou...
SenchaCon 2016: LinkRest - Modern RESTful API Framework for Ext JS Apps - Rou...
 
[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics
 
Node proxy
Node proxyNode proxy
Node proxy
 
WebLogic Server Work Managers and Overload Protection
WebLogic Server Work Managers and Overload ProtectionWebLogic Server Work Managers and Overload Protection
WebLogic Server Work Managers and Overload Protection
 
Eureka moment
Eureka momentEureka moment
Eureka moment
 
Using ТРСС to study Firebird performance
Using ТРСС to study Firebird performanceUsing ТРСС to study Firebird performance
Using ТРСС to study Firebird performance
 
77739818 troubleshooting-web-logic-103
77739818 troubleshooting-web-logic-10377739818 troubleshooting-web-logic-103
77739818 troubleshooting-web-logic-103
 
Oracle WorkManager
Oracle WorkManagerOracle WorkManager
Oracle WorkManager
 
What is cool with Domino V10, Proton and Node.JS, and why would I use it in ...
What is cool with Domino V10, Proton and Node.JS, and why would I use it in ...What is cool with Domino V10, Proton and Node.JS, and why would I use it in ...
What is cool with Domino V10, Proton and Node.JS, and why would I use it in ...
 
Orphans, Corruption, Careful Write, and Logging
Orphans, Corruption, Careful Write, and LoggingOrphans, Corruption, Careful Write, and Logging
Orphans, Corruption, Careful Write, and Logging
 
"Building intuitive command-line interfaces in .NET", Alex Thissen
"Building intuitive command-line interfaces in .NET", Alex Thissen"Building intuitive command-line interfaces in .NET", Alex Thissen
"Building intuitive command-line interfaces in .NET", Alex Thissen
 
How to Use OWASP Security Logging
How to Use OWASP Security LoggingHow to Use OWASP Security Logging
How to Use OWASP Security Logging
 
Introduction to CQ5
Introduction to CQ5Introduction to CQ5
Introduction to CQ5
 
Introduction to Business Processes 3.7
Introduction to Business Processes 3.7Introduction to Business Processes 3.7
Introduction to Business Processes 3.7
 

Viewers also liked

A 20 minute introduction to AngularJS for XPage developers
A 20 minute introduction to AngularJS for XPage developersA 20 minute introduction to AngularJS for XPage developers
A 20 minute introduction to AngularJS for XPage developersMark Leusink
 
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...Paul Withers
 
IBM ConnectED 2015 - MAS103 XPages Performance and Scalability
IBM ConnectED 2015 - MAS103 XPages Performance and ScalabilityIBM ConnectED 2015 - MAS103 XPages Performance and Scalability
IBM ConnectED 2015 - MAS103 XPages Performance and ScalabilityPaul Withers
 
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
 
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
 
MWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVCMWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVCUlrich 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
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the BasicsUlrich 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
 
Building Responsive Applications Using XPages
Building Responsive Applications Using XPagesBuilding Responsive Applications Using XPages
Building Responsive Applications Using XPagesTeamstudio
 
Dnug35 ak-dev.071111-basic
Dnug35 ak-dev.071111-basicDnug35 ak-dev.071111-basic
Dnug35 ak-dev.071111-basicUlrich Krause
 
Extension Library - Viagra for XPages
Extension Library - Viagra for XPagesExtension Library - Viagra for XPages
Extension Library - Viagra for XPagesUlrich Krause
 
Angular.js in XPages
Angular.js in XPagesAngular.js in XPages
Angular.js in XPagesMark Roden
 
Compact, Compress, De-Duplicate (DAOS)
Compact, Compress, De-Duplicate (DAOS)Compact, Compress, De-Duplicate (DAOS)
Compact, Compress, De-Duplicate (DAOS)Ulrich Krause
 
The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...Mark Roden
 

Viewers also liked (20)

A 20 minute introduction to AngularJS for XPage developers
A 20 minute introduction to AngularJS for XPage developersA 20 minute introduction to AngularJS for XPage developers
A 20 minute introduction to AngularJS for XPage developers
 
XPages: Performance-Optimierung - Ulrich Krause (eknori) SNoUG 2013
XPages: Performance-Optimierung  - Ulrich Krause (eknori) SNoUG 2013XPages: Performance-Optimierung  - Ulrich Krause (eknori) SNoUG 2013
XPages: Performance-Optimierung - Ulrich Krause (eknori) SNoUG 2013
 
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
 
IBM Connections Cloud Administration
IBM Connections Cloud AdministrationIBM Connections Cloud Administration
IBM Connections Cloud Administration
 
IBM ConnectED 2015 - MAS103 XPages Performance and Scalability
IBM ConnectED 2015 - MAS103 XPages Performance and ScalabilityIBM ConnectED 2015 - MAS103 XPages Performance and Scalability
IBM ConnectED 2015 - MAS103 XPages Performance and Scalability
 
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
 
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!
 
XPages - The Basics
XPages - The BasicsXPages - The Basics
XPages - The Basics
 
MWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVCMWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVC
 
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
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the Basics
 
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
 
Building Responsive Applications Using XPages
Building Responsive Applications Using XPagesBuilding Responsive Applications Using XPages
Building Responsive Applications Using XPages
 
Dnug35 ak-dev.071111-basic
Dnug35 ak-dev.071111-basicDnug35 ak-dev.071111-basic
Dnug35 ak-dev.071111-basic
 
Extension Library - Viagra for XPages
Extension Library - Viagra for XPagesExtension Library - Viagra for XPages
Extension Library - Viagra for XPages
 
Angular.js in XPages
Angular.js in XPagesAngular.js in XPages
Angular.js in XPages
 
Compact, Compress, De-Duplicate (DAOS)
Compact, Compress, De-Duplicate (DAOS)Compact, Compress, De-Duplicate (DAOS)
Compact, Compress, De-Duplicate (DAOS)
 
The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...
 

Similar to Life in the fast lane. Full speed XPages

Best Practices with PostgreSQL on Solaris
Best Practices with PostgreSQL on SolarisBest Practices with PostgreSQL on Solaris
Best Practices with PostgreSQL on SolarisJignesh Shah
 
Scale and Throughput @ Clicktale with Akka
Scale and Throughput @ Clicktale with AkkaScale and Throughput @ Clicktale with Akka
Scale and Throughput @ Clicktale with AkkaYuval Itzchakov
 
Exploring the Oracle Database Architecture.ppt
Exploring the Oracle Database Architecture.pptExploring the Oracle Database Architecture.ppt
Exploring the Oracle Database Architecture.pptMohammedHdi1
 
exploring-the-oracle-database-architecture.ppt
exploring-the-oracle-database-architecture.pptexploring-the-oracle-database-architecture.ppt
exploring-the-oracle-database-architecture.pptAmitavaRoy49
 
Oracle Performance On Linux X86 systems
Oracle  Performance On Linux  X86 systems Oracle  Performance On Linux  X86 systems
Oracle Performance On Linux X86 systems Baruch Osoveskiy
 
Deployment Strategies (Mongo Austin)
Deployment Strategies (Mongo Austin)Deployment Strategies (Mongo Austin)
Deployment Strategies (Mongo Austin)MongoDB
 
Deployment Strategies
Deployment StrategiesDeployment Strategies
Deployment StrategiesMongoDB
 
Understanding Elastic Block Store Availability and Performance
Understanding Elastic Block Store Availability and PerformanceUnderstanding Elastic Block Store Availability and Performance
Understanding Elastic Block Store Availability and PerformanceAmazon Web Services
 
Client Side Performance @ Xero
Client Side Performance @ XeroClient Side Performance @ Xero
Client Side Performance @ XeroCraig Walker
 
Azure SQL - more or/and less than SQL Server
Azure SQL - more or/and less than SQL ServerAzure SQL - more or/and less than SQL Server
Azure SQL - more or/and less than SQL ServerRafał Hryniewski
 
KoprowskiT_SPBizConference_2AMaDisasterJustBegan
KoprowskiT_SPBizConference_2AMaDisasterJustBeganKoprowskiT_SPBizConference_2AMaDisasterJustBegan
KoprowskiT_SPBizConference_2AMaDisasterJustBeganTobias Koprowski
 
KoprowskiT_SPBizConf_2AMaDisasterJustBegan
KoprowskiT_SPBizConf_2AMaDisasterJustBeganKoprowskiT_SPBizConf_2AMaDisasterJustBegan
KoprowskiT_SPBizConf_2AMaDisasterJustBeganTobias Koprowski
 
Deployment Strategy
Deployment StrategyDeployment Strategy
Deployment StrategyMongoDB
 
Speeding Up Atlas Deep Learning Platform with Alluxio + Fluid
Speeding Up Atlas Deep Learning Platform with Alluxio + FluidSpeeding Up Atlas Deep Learning Platform with Alluxio + Fluid
Speeding Up Atlas Deep Learning Platform with Alluxio + FluidAlluxio, Inc.
 
Start Counting: How We Unlocked Platform Efficiency and Reliability While Sav...
Start Counting: How We Unlocked Platform Efficiency and Reliability While Sav...Start Counting: How We Unlocked Platform Efficiency and Reliability While Sav...
Start Counting: How We Unlocked Platform Efficiency and Reliability While Sav...VMware Tanzu
 
Tuning Linux Windows and Firebird for Heavy Workload
Tuning Linux Windows and Firebird for Heavy WorkloadTuning Linux Windows and Firebird for Heavy Workload
Tuning Linux Windows and Firebird for Heavy WorkloadMarius Adrian Popa
 
(ATS6-PLAT07) Managing AEP in an enterprise environment
(ATS6-PLAT07) Managing AEP in an enterprise environment(ATS6-PLAT07) Managing AEP in an enterprise environment
(ATS6-PLAT07) Managing AEP in an enterprise environmentBIOVIA
 
Day 7 - Make it Fast
Day 7 - Make it FastDay 7 - Make it Fast
Day 7 - Make it FastBarry Jones
 

Similar to Life in the fast lane. Full speed XPages (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
 
Best Practices with PostgreSQL on Solaris
Best Practices with PostgreSQL on SolarisBest Practices with PostgreSQL on Solaris
Best Practices with PostgreSQL on Solaris
 
Scale and Throughput @ Clicktale with Akka
Scale and Throughput @ Clicktale with AkkaScale and Throughput @ Clicktale with Akka
Scale and Throughput @ Clicktale with Akka
 
Autosar Basics hand book_v1
Autosar Basics  hand book_v1Autosar Basics  hand book_v1
Autosar Basics hand book_v1
 
Exploring the Oracle Database Architecture.ppt
Exploring the Oracle Database Architecture.pptExploring the Oracle Database Architecture.ppt
Exploring the Oracle Database Architecture.ppt
 
exploring-the-oracle-database-architecture.ppt
exploring-the-oracle-database-architecture.pptexploring-the-oracle-database-architecture.ppt
exploring-the-oracle-database-architecture.ppt
 
Oracle Performance On Linux X86 systems
Oracle  Performance On Linux  X86 systems Oracle  Performance On Linux  X86 systems
Oracle Performance On Linux X86 systems
 
Deployment Strategies (Mongo Austin)
Deployment Strategies (Mongo Austin)Deployment Strategies (Mongo Austin)
Deployment Strategies (Mongo Austin)
 
Deployment Strategies
Deployment StrategiesDeployment Strategies
Deployment Strategies
 
Understanding Elastic Block Store Availability and Performance
Understanding Elastic Block Store Availability and PerformanceUnderstanding Elastic Block Store Availability and Performance
Understanding Elastic Block Store Availability and Performance
 
Client Side Performance @ Xero
Client Side Performance @ XeroClient Side Performance @ Xero
Client Side Performance @ Xero
 
Azure SQL - more or/and less than SQL Server
Azure SQL - more or/and less than SQL ServerAzure SQL - more or/and less than SQL Server
Azure SQL - more or/and less than SQL Server
 
KoprowskiT_SPBizConference_2AMaDisasterJustBegan
KoprowskiT_SPBizConference_2AMaDisasterJustBeganKoprowskiT_SPBizConference_2AMaDisasterJustBegan
KoprowskiT_SPBizConference_2AMaDisasterJustBegan
 
KoprowskiT_SPBizConf_2AMaDisasterJustBegan
KoprowskiT_SPBizConf_2AMaDisasterJustBeganKoprowskiT_SPBizConf_2AMaDisasterJustBegan
KoprowskiT_SPBizConf_2AMaDisasterJustBegan
 
Deployment Strategy
Deployment StrategyDeployment Strategy
Deployment Strategy
 
Speeding Up Atlas Deep Learning Platform with Alluxio + Fluid
Speeding Up Atlas Deep Learning Platform with Alluxio + FluidSpeeding Up Atlas Deep Learning Platform with Alluxio + Fluid
Speeding Up Atlas Deep Learning Platform with Alluxio + Fluid
 
Start Counting: How We Unlocked Platform Efficiency and Reliability While Sav...
Start Counting: How We Unlocked Platform Efficiency and Reliability While Sav...Start Counting: How We Unlocked Platform Efficiency and Reliability While Sav...
Start Counting: How We Unlocked Platform Efficiency and Reliability While Sav...
 
Tuning Linux Windows and Firebird for Heavy Workload
Tuning Linux Windows and Firebird for Heavy WorkloadTuning Linux Windows and Firebird for Heavy Workload
Tuning Linux Windows and Firebird for Heavy Workload
 
(ATS6-PLAT07) Managing AEP in an enterprise environment
(ATS6-PLAT07) Managing AEP in an enterprise environment(ATS6-PLAT07) Managing AEP in an enterprise environment
(ATS6-PLAT07) Managing AEP in an enterprise environment
 
Day 7 - Make it Fast
Day 7 - Make it FastDay 7 - Make it Fast
Day 7 - Make it Fast
 

More from 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-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookUlrich Krause
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondUlrich Krause
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 PerformanceUlrich 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
 

More from Ulrich Krause (15)

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-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbook
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 Performance
 
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
 

Recently uploaded

Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 

Recently uploaded (20)

Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 

Life in the fast lane. Full speed XPages

  • 1. AD103 - Life In the Fast Lane Ulrich Krause, Indianapolis, August 22, 2013 Full Speed XPages !
  • 2. AD103 - Life in the Fast Lane – Full Speed XPages! About: Ulrich Krause Administrator /Developer since 1993 Senior Software Architect at BCC OpenNTF Contributor OpenNTF Board of Directors Blog http://www.eknori.de IBM Champion 2011/2012/2013 Notes Forum (http://www.atnotes.de)
  • 3. AD103 - Life in the Fast Lane – Full Speed XPages! Agenda What factors affect Performance? Java vs. JavaScript ViewNavigator vs. GetNextDocument Stringbuilder vs. Concat (+) JSF Lifecycle Listener Partial Update / Partial Execute Variable Resolver Tools
  • 4. AD103 - Life in the Fast Lane – Full Speed XPages! XPages Request
  • 5. AD103 - Life in the Fast Lane – Full Speed XPages! Hardware The hardware used has a significant influence on performance. There are 3 key elements: • CPU • Main Memory • Hard Disk
  • 6. AD103 - Life in the Fast Lane – Full Speed XPages! Hardware Main Memory • Limit defined by the operating system •  Scalability CPU • Cores / Clock / Cache •  Poor response time Weak CPU AND Low Memory • Poor overall performance • Poor response times • Server "hangs"
  • 7. AD103 - Life in the Fast Lane – Full Speed XPages! Network Latency • Time taken for data transmission between multiple computers on a network Bandwidth • Rate of transmission of data Greater Bandwidth + Lower Latency -------------------------------- = Better Connection
  • 8. AD103 - Life in the Fast Lane – Full Speed XPages! Client & Browser Hardware How many data requests / responses are transmitted How much data is transferred (size) Caching of resources How much CSJS runs Size / complexity of the CSS Complexity of the site structure
  • 9. AD103 - Life in the Fast Lane – Full Speed XPages! Limiting factors on performance Browser / HTTP server • Network latency – distance/time to server. • Bandwidth – size of files. • Browser limits on concurrent downloads • IE7 allows 2 downloads, IE8 allows 6 HTTP Server / App Server • HTTP Server JVM heap size & garbage collector • CPU time, competition between threads, gives slower response times • Threads, limited to 40 by default
  • 10. AD103 - Life in the Fast Lane – Full Speed XPages! Limiting factors on performance App Server / Domino context • Read design elements from the NSF (XPage .class files, form structure, etc) • Backend API calls may be expensive, especially for large data sets. • Design elements may be network requests.
  • 11. AD103 - Life in the Fast Lane – Full Speed XPages! Limiting factors on performance Servlet / Lifecycle • Restore control tree – file system read. Control tree locking – no concurrent access. • Rendered re-evaluated for every control for most phases Browser/Client JavaScript/Dojo • Inline JavaScript blocks insertion of later HTML elements into the DOM tree • Dojo does AJAX requests for .js files for dojo modules that are not loaded
  • 12. AD103 - Life in the Fast Lane – Full Speed XPages! General Performance Options notes.ini • HTTPJVMMaxHeapSizeSet=1 • HTTPJVMMaxHeapSize=256M • Should be set to ¼ of the available RAM Domino Administrator • HTTP server "Enable logging to" disabled • HTTP server thread count – defaults to 40 Remember, enabling the debugger affects performance • JavaEnableDebug=1 • JavaDebugOptions=transport=dt_socket,server=y,suspe nd=n,address=8000 • JavascriptEnableDebug=1
  • 13. AD103 - Life in the Fast Lane – Full Speed XPages! 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. AD103 - Life in the Fast Lane – Full Speed XPages! XPages Design Optimizations Use Simple actions vs links or button with window.location JS Reduce server phase processing • Use partial update where possible • Use partial execute where possible • Use disableValidators & immediate event Minimize work in rendered / visible computations • Use variable resolver When using Repeats & Views • Use viewEntry.getColumnValue instead of viewEntry.getDocument.getColumn • Use Domino View data source dataCache property where possible
  • 15. AD103 - Life in the Fast Lane – Full Speed XPages! XPages Design Optimizations Load-time vs Runtime • Using loaded vs rendered • ExtLib Dynamic Content • allows partial re-loading, so more use of load-time optimizations Loading resources in the browser • CSS & browser JS • extract to separate files. Minify & compress files • Images • use correct size & format. Use CSS Image Sprites as possible
  • 16. AD103 - Life in the Fast Lane – Full Speed XPages! JavaScript/CSS Aggregation Groups many DOJO, CSS / JS files into a single file • Less requests from the browser to the server • Performance improvements on networks with high latency • Enhanced performance parsing CSS / JS • Fewer connections to the server On the Server: xsp.properties: xsp.resources.aggregate=true
  • 17. AD103 - Life in the Fast Lane – Full Speed XPages! JavaScript/CSS Aggregation
  • 18. AD103 - Life in the Fast Lane – Full Speed XPages! XPages PreLoad XPagesPreload=1 New Feature in Notes / Domino 8.5.3 Works on Server and 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
  • 19. AD103 - Life in the Fast Lane – Full Speed XPages! XPages PreLoad XPagesPreloadDB = Server!!Db.nsf/XPage.xsp, myLocalDb.nsf Works at the application level The application is loaded on the client / server startup into memory. • This happens even when the application is first opened in the browser
  • 20. AD103 - Life in the Fast Lane – Full Speed XPages! XPages PreLoad (cont.) For each entry in the notes.ini variable, an XPage URL is generated and sent to the server The application is loaded, and the HTML generated The XPages runtime discards the HTML, but retains the application in memory
  • 21. AD103 - Life in the Fast Lane – Full Speed XPages! Scoped Variables applicationScope • Are visible for all users of one application. • Expires some time after the last user used an applicationScope variable. • 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.
  • 22. AD103 - Life in the Fast Lane – Full Speed XPages! Scoped Variables (cont.) 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.
  • 23. AD103 - Life in the Fast Lane – Full Speed XPages! Caching with Application Scope
  • 24. AD103 - Life in the Fast Lane – Full Speed XPages! JSF Lifecycle
  • 25. AD103 - Life in the Fast Lane – Full Speed XPages! XPages Lifecycle Listener What happens in each phase of the JSF lifecycle? Ulrich Krause: http://openntf.org/XSnippets.nsf/snippet.xsp?id=a-simple-lifecyclelistener-
  • 26. AD103 - Life in the Fast Lane – Full Speed XPages! XPages Masterclass http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=XPages%20Master class
  • 27. AD103 - Life in the Fast Lane – Full Speed XPages! When to Execute - # vs $ # • Executed every time the page is rendered • Use for values that are likely to change $ • Executed when the page is first loaded • Use for values that don't change
  • 28. AD103 - Life in the Fast Lane – Full Speed XPages! DataContext Can be thought of as global variables Value can be computed dynamically or on page load • You can use ${javascript:@Today()} and run it once rather than running a function each time. Can be scoped to any level that datasources can • XPage, Custom Control or Panel • Set a dataContext in a panel in a repeat control to avoid multiple references to a NotesDocument's item Is Referenced using EL • At no point in the references do you run SSJS • Not having to go through the SSJS parser
  • 29. AD103 - Life in the Fast Lane – Full Speed XPages! DataContext - Pitfall Do not bind data context variables dynamically. • They will be recomputed again and again, even when in partial execution mode and if they are not in use
  • 30. AD103 - Life in the Fast Lane – Full Speed XPages! DataContext - Pitfall
  • 31. AD103 - Life in the Fast Lane – Full Speed XPages! Partial Refresh / Update (Pro) Reduced control processing in the render response phase • Means less work on the server • RenderResponse is the most intensive phase Smaller response from server. • Means reduced network usage Better browser experience • Rest of the page is still visible while waiting for a response • Inserting small sections into the page is much faster than reloading a full page.
  • 32. AD103 - Life in the Fast Lane – Full Speed XPages! Partial Refresh / Update (Cons) Dependancy outside of the partial update area • Other areas of the control tree are not processed,so any SSJS scripts in those other controls will not be run. • Enabling Partial Update where it was previously full update may lead to functional problems Only one area may be partial updated by default • In CSJS you can schedule later partial updates of related areas, but any concurrent requests will wait for exclusive access to the server-side control tree before processing on the server http://www.timtripcony.com/blog.nsf/d6plinks/TTRY- 84B6VP
  • 33. AD103 - Life in the Fast Lane – Full Speed XPages! Partial Refresh / Update (Cons) Refreshing more than one target ID in a single partial refresh event • http://www.timtripcony.com/blog.nsf/d6plinks/TTRY- 84B6VP
  • 34. AD103 - Life in the Fast Lane – Full Speed XPages! Partial Execution Reduced 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
  • 35. AD103 - Life in the Fast Lane – Full Speed XPages! Partial Execution (cont.) 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
  • 36. AD103 - Life in the Fast Lane – Full Speed XPages! Partial Execution execMode added in 8.5.1 (not in 8.5.0) execId slightly difficult to select in Designer • Select your button, in the Outline view, toggle open the button, select the child Event Handler control, then set the execId property on the Event Handler. • [Better UI proposed in Notes/Domino Next – in the Events tab]
  • 37. AD103 - Life in the Fast Lane – Full Speed XPages! disableValidators / immediate disableValidators • JSF life cycle through all phases (1-6) • But requests will not validate the data • Converters continue to work. • Items in documents will be updated Immediate • JSF Lifecycle processes only phases (1, 2, 6) • No data processing • Items in documents are not updated • Onclick event handler scripts and render response calculations are performed
  • 38. AD103 - Life in the Fast Lane – Full Speed XPages! Minimize work in rendered/ visible computationMost 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
  • 39. AD103 - Life in the Fast Lane – Full Speed XPages! Minimize work in rendered / visible computationThe 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
  • 40. AD103 - Life in the Fast Lane – Full Speed XPages! Using loaded vs rendered Loaded • is only computed once in the createView phase • not re-computed in the other 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
  • 41. AD103 - Life in the Fast Lane – Full Speed XPages! Images Use correct file type depending on content • JPEG for complex and 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
  • 42. AD103 - Life in the Fast Lane – Full Speed XPages! Image Sprites Use CSS Image Sprites • If you have multiple small images, make a single larger image containing the smaller images • Use CSS to display only the relevant subset image at a location 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
  • 43. AD103 - Life in the Fast Lane – Full Speed XPages! CSS Image Sprite Sample http://www.w3schools.com/css/tryit.asp?filename=trycss_sprites_im g
  • 44. AD103 - Life in the Fast Lane – Full Speed XPages! XPages Toolbox XPages based Application • Runs on the Domino server or the Notes client • An NSF needs to be installed on the server/Notes client • A profiler jar file should be added to the JVM launch options Measures CPU performance and memory allocation Available from OpenNTF.org • Free open source project • http://www.openntf.org/internal/home.nsf/project.xsp?acti on=openDocument&name=XPages%20Toolbox
  • 45. AD103 - Life in the Fast Lane – Full Speed XPages! XPages Toolbox
  • 46. AD103 - Life in the Fast Lane – Full Speed XPages! 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.ht ml
  • 47. AD103 - Life in the Fast Lane – Full Speed XPages! Heapdump / Javadump Analyzer
  • 48. AD103 - Life in the Fast Lane – Full Speed XPages! 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
  • 49. AD103 - Life in the Fast Lane – Full Speed XPages! 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 objectsUse the Eclipse Java debugger. • In Dominonotes.ini add these 2 options: • JavaEnableDebug=1 • JavaDebugOptions=transport=dt_socket,server=y,suspend=n,ad dress=8000
  • 50. AD103 - Life in the Fast Lane – Full Speed XPages! Optimization – Step By Step
  • 51. AD103 - Life in the Fast Lane – Full Speed XPages! 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. AD103 - Life in the Fast Lane – Full Speed XPages! XAgent – SSJS
  • 53. AD103 - Life in the Fast Lane – Full Speed XPages! 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
  • 54. AD103 - Life in the Fast Lane – Full Speed XPages! XAgent – SSJS – UNID from Item
  • 55. AD103 - Life in the Fast Lane – Full Speed XPages! XAgent – SSJS - SingleItem Get all „Contacts“ into a NotesDocumentCollection, loop the collection and get the JSON from an item on the document. JSON is calculated on document save
  • 56. AD103 - Life in the Fast Lane – Full Speed XPages! XAgent – SSJS - SingleItem
  • 57. AD103 - Life in the Fast Lane – Full Speed XPages! XAgent – SSJS – ViewNavigator loop thru a view and get the JSON from a view column.
  • 58. AD103 - Life in the Fast Lane – Full Speed XPages! XAgent – SSJS – ViewNavigator
  • 59. AD103 - Life in the Fast Lane – Full Speed XPages! 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
  • 60. AD103 - Life in the Fast Lane – Full Speed XPages! 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
  • 61. AD103 - Life in the Fast Lane – Full Speed XPages! XAgent – SSJS – ViewNavigator + StringBuilderloop thru a view and get the JSON from a view column. Use a StringBuilder to concat the JSON
  • 62. AD103 - Life in the Fast Lane – Full Speed XPages! XAgent – SSJS – ViewNavigator + StringBuilder
  • 63. AD103 - Life in the Fast Lane – Full Speed XPages! 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. AD103 - Life in the Fast Lane – Full Speed XPages! XAgent – Java
  • 65. AD103 - Life in the Fast Lane – Full Speed XPages! 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
  • 66. AD103 - Life in the Fast Lane – Full Speed XPages! Themes 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
  • 67. AD103 - Life in the Fast Lane – Full Speed XPages! Load Resources from Themes Global Application / Configuration properties