SlideShare a Scribd company logo
1 of 55
Download to read offline
AD-1094 : Move Your XPages
Applications to the Fast Lane
Howard Greenberg, Partner, TLCC
February 1, 2016
Move your XPages Applications to the Fast Lane
2
Are your XPages Apps are like this???
Your Presenter Today – Howard Greenberg
• Certified Lotus Instructor since R3
• Co-founded TLCC in 1997
• IBM Champion
• Prior to that 12 years at IBM in the PC group
• Also…
– Certified Public Accountant
– Certified Information Systems Auditor (CISA)
– Certified Flight Instructor
3
Agenda
• What affects XPages Peformance
• XPages Lifecycle
• Partial Refresh vs. Partial Execution
• Tools to Analyze Peformance
• Case Studies
• Questions???
4
What affects XPages Performance?
5
Client:
Browser
OS
CPU
Hard drive
Memory
Network
Speed and
Latency Server:
Hardware
OS
Application (Domino)
What’s Involved on the Server...
• Server HW and OS pass network request to Domino
• Domino networking and HTTP Task
• XPages runtime engine
– Restore state (might read from disk)
– Java code builds HTML, etc. that gets sent to
browser
• Uses the JSF Lifecycle (more on this later)
• Calls Backend Domino objects if needed
• Domino passes response (HTML, CSS, JS, etc.) to OS
and via network to client
6
XPages Lifecycle
7
JSF Life Cycle - Post
8
Restore View
•Restore component tree
•Events:
•afterRestoreView
Apply Request
Values
•Copy data to Editable
controls
Process Validations
•Validations
•Converters
Update Model
Values
•Move values to data
source
Invoke Application
•Application logic
•Events:
•onClientLoad (XPage,
etc)
•on… events of button,
etc.
Render Response
•Convert to HTML, etc.
•Events:
•beforeRenderReponse
•afterRenderResponse
Request
Response
Lifecycle1 XPage – Initial Page Load (GET Request)
9
Render Response
•Rendered property for id: label1
•Label property for id: label1
•Rendered property for id: inputText1
•Default value property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•values property for id: comboBox1
•values property for id: comboBox1
•Rendered property for id: computedField1
•Value property for id: computedField1
•Rendered property for id: computedField2
•Value property for id: computedField2
12 SSJS Calls
Lifecyle1 – Submit POST Request (Full Update)
Restore View Apply Request Values (8)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Process Validations (11)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Validation for inputText1
•Default value property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•values property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Update Model Values (8)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Invoke Application (1)
•OnClick event for id: button1
Render Response (11)
•Rendered property for id: label1
•Label property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•values property for id: comboBox1
•values property for id: comboBox1
•Rendered property for id: computedField1
•Value property for id: computedField1
•Rendered property for id: computedField2
•Value property for id: computedField239 SSJS Calls
10
When to Execute - # vs $
• # is Compute dynamically
– Executed every time the page is
rendered
– Use for values that are likely to change
• $ is Compute on Page Load
– Executed when the page is first loaded
– Use for values that don't change
11
<xp:label id="label1">
<xp:this.value>
<![CDATA[#{javascript:return “My
Label”;}]]>
</xp:this.value>
</xp:label>
Lifecyle2 – Submit (Full Update) - On Page Load
12
Restore View Apply Request Values
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Process Validations (2)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Validation for inputText1
•Default value property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•values property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Update Model Values
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Invoke Application (1)
•OnClick event for id: button1
Render Response (3)
•Rendered property for id: label1
•Label property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•values property for id: comboBox1
•values property for id: comboBox1
•Rendered property for id: computedField1
•Value property for id: computedField1
•Rendered property for id: computedField2
•Value property for id: computedField2
6 SSJS Calls, saved 33
Changed all Rendered and
Values (comboBox) to only
compute on Page Load
Options for dynamically computing the Rendered:
• Scoped variables
– Still get calculated but do the heavy lifting once and then
read the scoped variable in the Rendered property
• DataContexts
– Compute a value at the Xpage or Panel level once
– Refer to the value using EL (much faster than SSJS)
13
But I need dynamic Rendering!
DataContext - Pitfall
• Be careful binding data context variables dynamically
– They will be recomputed multiple times, even when in
partial execution mode and if they are not in use (six times!)
• Apply Request Values
• Process Validations
• Update Model Values
• Invoke Application
• Twice in Render Response!
• If computed on page load only computed when page loads
• See Paul Withers blog entry to learn how to set a data context
value via code
14
Partial Refresh vs. Partial Execution?
• Partial Refresh (Update)
– Computes entire XPage, only sends back
what is in the partial refresh id (refreshId)
• Partial Execution
– Only calculates what is in the area
specified (execId)
15
Partial Refresh Demo - Results
16
Restore View Apply Request Values (8)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Process Validations (11)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Validation for inputText1
•Default value property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•values property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Update Model Values (8)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Invoke Application (1)
•OnClick event for id: button1
Render Response (2)
•Rendered property for id: label1
•Label property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•values property for id: comboBox1
•values property for id: comboBox1
•Rendered property for id: computedField1
•Value property for id: computedField1
•Rendered property for id: computedField2
•Value property for id: computedField2
30 SSJS Calls, saved 9
Only Savings
were here!
Partial Refresh Pros and Cons
• Pros
– Reduced control processing in the render response phase
– Smaller response from server
• Means reduced network usage
– Better UI experience
• Rest of the page is still visible while waiting for a response
• Cons
– Controls like computed fields outside refresh area don’t refresh
– Be careful turning this on for a completed XPage (TEST!)
– Can only update one area (one id)
• Workaround from Tim Tripcony on XPages Wiki
17
Partial Execution Demo - Results
18
Restore View Apply Request Values (1)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Process Validations (1)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Validation for inputText1
•Default value property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•values property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Update Model Values (1)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Invoke Application (1)
•OnClick event for id: button1
Render Response (12)
•Rendered property for id: label1
•Label property for id: label1
•Rendered property for id: inputText1
•Default value property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•values property for id: comboBox1
•values property for id: comboBox1
•Rendered property for id: computedField1
•Value property for id: computedField1
•Rendered property for id: computedField2
•Value property for id: computedField2
16 SSJS Calls
Saved 13
Partial Execution Pros and Cons
• Pros
– Reduced processing in the 3 data-processing phases
• Cons
– Control with onClick event has to be inside the execId area
– Editable values outside of the executed area do not get
submitted/updated (reset to default values)
– Existing XPages need analysis/testing before using this
• Current onclick events might refer to controls where the data
is not submitted
– ExecMode available in 8.5.1
– Have to use source to enter ExecId in 8.5 (9.0 has Designer UI)
19
Partial Refresh AND Execution Demo - Results
Restore View Apply Request Values (1)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Process Validations (1)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Validation for inputText1
•Default value property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•values property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Update Model Values (1)
•Rendered property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•Rendered property for id: comboBox1
•Rendered property for id: computedField1
•Rendered property for id: computedField2
Invoke Application (1)
•OnClick event for id: button1
Render Response (2)
•Rendered property for id: label1
•Label property for id: label1
•Rendered property for id: inputText1
•Rendered property for id: label2
•Rendered property for id: comboBox1
•values property for id: comboBox1
•values property for id: comboBox1
•Rendered property for id: computedField1
•Value property for id: computedField1
•Rendered property for id: computedField2
•Value property for id: computedField2
6 SSJS Calls,
saved 33
20
Using the loaded Property
• Loaded = true
– In component tree
• Loaded = false
– Control is not created
– Can never be rendered
or accessed
– Saves memory too
21
Loaded only computed once in the createView phase
Watch Out for @DbLookup
• @DbLookup about 3-4 times slower than SSJS
– res = @DbLookup(db,"CustomersByNameView",names[i], "phone");
vs.
– doc = vw.getDocumentByKey(names[i], true);
res = doc.getItemValueString("phone");
• Five lookups repeated 100 times
– @DbLookup averaged about 1728ms
– getDocumentByKey averaged 510ms
• Other @Functions not tested
22
Life Cycle Performance Suggestions
• Most properties, like CSS “style” are
only computed in the
RenderResponse phase
• Watch and minimize:
– Rendered property (when dynamic)
• Computed multiple times!
• Use dataContexts or scoped variables
when able
• Use both Partial Refresh (Update)
and Partial Execute when able
23
Tools to Test/Debug Performance Issues
• Print statements
– In rendered/visible computations to see how often executed
• print("panel2 evaluating rendered property");
– In the XPages events such as:
• before/afterPageLoad, afterRestoreView,
before/afterRenderResponse
– In the document data source events:
• queryNewDocument, postSaveDocument, etc.
– Or use the Debug Toolbar (don‘t have to view server
console)
• http://www.openntf.org/main.nsf/project.xsp?r=project/
XPage%20Debug%20Toolbar
24
More Tools
• Server OS tools to monitor CPU, memory and network
• Browser developer tools
– for watching network transactions, partial updates, response
times
– BROWSER: Firebug, Chrome, etc. developer tools
– XPiNC: FirebugLite from ExtLib
• Java / Javascript Debugging
– Degrades performance but can inspect objects
• Use the Eclipse Java debugger
25
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 is added to the JVM directory
– Modify the security policy file
– Notes.ini is modified (all in the documentation!)
• Measures CPU performance and memory allocation
• Available from OpenNTF.org
– Free open source project
– http://www.openntf.org/main.nsf/project.xsp?r=project/XPa
ges%20Toolbox
26
XPages Toolbox Functionality
• Measures CPU and Wall time
• Back end Domino object profiling
• Run time monitor (memory)
• Session dumps (XML file)
• Heap dump of the JVM running in the HTTP task
– Or from the Domino console (or from your code)
• 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 (need to also
install the IBM dump tool)
http://www.eclipse.org/mat/
http://www.ibm.com/developerworks/java/jdk/tools/dtfj.html
• Thread Monitoring
27
CPU Profiler – See how long and where...
28
Back End (Domino) Profiler
29
• Simple Repeat – what could be wrong?
– Configuration Lookups to get other nsf names
– Lookups to get “role” of user
– Opening Notes document to get values
– Computed view value
– Complicated rendered formula in repeat
Case Study 1 - Repeat
30
• Add Application Scope variables to store database
names
• Or (better yet) create an ApplicationBean in Java
Case Study 1 – First Step add scoped variable for Config (db names)
31
To retrieve:
Improvement – Repeat_Config
32
Xpage Calls Time CPU Time Calls(%)
BE
Time(%)
CPU
Time(%)
Start 3564 1547 1688
Cache Config 2499 733 1016 143% 211% 166%
• Add App Scope variable to store user roles
• No more @DbLookup in rendered
– Pulls value from memory - much faster!
Case Study 1 – Next add scoped variable for User Information
33
To retrieve:
Improvement – Repeat_User
34
All previous changes are cumulative....
Xpage Calls Time CPU Time Calls(%)
BE
Time(%)
CPU
Time(%)
Start 3564 1547 1688
Cache Config 2499 733 1016 143% 211% 166%
Cache User 1992 265 469 179% 584% 360%
• Avoid opening NotesDocument object to get values
not in the view
– Created a new view with missing columns
– Changed reference to use EL for all but two
columns that need to lookup in another DB
Case Study 1 – Next create a new view
35
Improvement – Repeat_BetterView
36
All previous changes are cumulative....
Xpage Calls Time CPU Time Calls(%)
BE
Time(%)
CPU
Time(%)
Start 3564 1547 1688
Cache Config 2499 733 1016 143% 211% 166%
Cache User 1992 265 469 179% 584% 360%
Better View 1656 283 375 215% 547% 450%
• Avoid doing the @Dblookup to get the sales person
based on the region
• Use a Bean to cache Region/Salesperson data
– HashMap: key is region name, value is salesperson
– Application scope (shared by all users)
Lookup the Sales Person from a Bean
37
Improvement – Repeat_CacheRegion
38
All previous changes are cumulative....
Xpage Calls Time CPU Time Calls(%)
BE
Time(%)
CPU
Time(%)
Start 3564 1547 1688
Cache Config 2499 733 1016 143% 211% 166%
Cache User 1992 265 469 179% 584% 360%
Better View 1656 283 375 215% 547% 450%
Cache Region 1614 93 250 221% 1663% 675%
• Store Sales Total by Customer in HashMap
– viewScope Managed Bean
• Caches sales total, key is customer name
• Also use ViewNavigator to get totals via
getNextCategory()
– Fast initialization of HashMap
Next Try: Use Java to Cache Sales Lookup
39
SSJS call to Bean
Improvement – Repeat_ComputeSalesJava
40
All previous changes are cumulative....
Xpage Calls Time CPU Time Calls(%)
BE
Time(%)
CPU
Time(%)
Start 3564 1547 1688
Cache Config 2499 733 1016 143% 211% 166%
Cache User 1992 265 469 179% 584% 360%
Better View 1656 283 375 215% 547% 450%
Cache Region 1614 93 250 221% 1663% 675%
Compute Sales - Java 816 16 172 437% 9669% 981%
• CustomerBean
– passes Collection of customer objects to Repeat
– The scope could be request, view, or application
• CacheBean
– Long lived information
– Config settings (database path and name)
– User profile (manager, sales rep or user)
– Region information (get Sales person for region)
– Application Scope
Do Everything in Java!
41
Java Classes
42
CustomerBean
CacheBean
Improvement – Repeat_AllJava
43
Xpage Calls Time CPU Time Calls(%)
BE
Time(%)
CPU
Time(%)
Start 3564 1547 1688
Cache Config 2499 733 1016 143% 211% 166%
Cache User 1992 265 469 179% 584% 360%
Better View 1656 283 375 215% 547% 450%
Cache Region 1614 93 250 221% 1663% 675%
Compute Sales - Java 816 16 172 437% 9669% 981%
All Java (request scope) 401 47 141 889% 3291% 1197%
All Java (view scope) 6 0 109 59400% NA 1549%
Performance Improvement for Case Study 1
44
0
500
1000
1500
2000
2500
3000
3500
4000
AxisTitle
Calls Time CPU Time
Case Study 2: Partial Refresh and Execution
• Added a lookup to compute sales by region
– Full Update/Exec
– Partial Refresh
– Partial Exec
– Both
45
Xpage Calls Time CPU Time Calls (%)
BE
Time (%)
CPU
Time(%)
Start 1918 1109 1375
Refresh 516 672 781 691% 230% 216%
Exec 1414 610 688 252% 254% 245%
Both 12 31 78 29700% 4990% 2164%
0
500
1000
1500
2000
2500
Start Refresh Exec Both
Calls Time CPU Time
Case Study 3: Data Contexts
• Compare Data Context (on page load vs. dynamic)
– Two data context variables
46
Xpage Calls Time Wall Time Calls (%)
BE
Time (%) CPU Time(%)
Dynamic 24 47 467
On Page Load 2 16 99 1200% 293% 472%
Recap
• Think about performance when designing
– JSF Lifecycle
• Avoiding computations in rendered
– Cache whenever possible
• Scoped variables
• Beans
• Measure performance
– Part of your testing processes
– Look for ways to improve
47
• TLCC Performance Webinar with Ulrich Krause and
myself from October, 2013
– YouTube and Slides
• Paul Withers blog (each link below is different)
– Part 1, Part 2, Part 3
• Tony McGuckin’s Video - XPages Master class
– 4 videos plus sample applications
• IBM article on JSF (non XPages)
• My Performance Webinar from October, 2015
– YouTube and Slides
48
Homework Time – Further References
49
 Email: howardg@tlcc.com
 Twitter: @TLCCLtd
 Web: www.tlcc.com
Download the Sample Application and presentation at:
http://www.tlcc.com/connect
Please do the online survey for this session!
THANK YOU IN ADVANCE!
Other Server Settings
50
The next slides contain other server
settings you may want to review with
your admin...
Server Performance Variables
• Hardware
– CPU, Network, Memory, and Hard Drive
• Operating System (Use 64 bit OS!)
• Domino:
– Memory Settings
• HTTPJVMMaxHeapSize
• Use HTTPJVMMaxHeapSizeSet=1 to prevent
changes
– Number of threads
• See this article from IBM
– Encryption (HTTPS)
51
Optimizing Memory Utilization
• xsp.persistence.mode - Set in XSP Properties file
– 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)
52
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
53
On the Server: xsp.properties:
xsp.resources.aggregate=true
Acknowledgements and Disclaimers
Availability. References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM
operates.
The workshops, sessions and materials have been prepared by IBM or the session speakers and reflect their own views. They are provided for informational
purposes only, and are neither intended to, nor shall have the effect of being, legal or other guidance or advice to any participant. While efforts were made to
verify the completeness and accuracy of the information contained in this presentation, it is provided AS-IS without warranty of any kind, express or implied. IBM
shall not be responsible for any damages arising out of the use of, or otherwise related to, this presentation or any other materials. Nothing contained in this
presentation is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms
and conditions of the applicable license agreement governing the use of IBM software.
All customer examples described are presented as illustrations of how those customers have used IBM products and the results they may have achieved.
Actual environmental costs and performance characteristics may vary by customer. Nothing contained in these materials is intended to, nor shall have the effect
of, stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results.
Acknowledgements and Disclaimers cont.
© Copyright IBM Corporation 2015. All rights reserved.
• U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
• IBM, the IBM logo, ibm.com, and IBM Notes and Domino are trademarks or registered trademarks of International Business Machines Corporation in the
United States, other countries, or both. If these and other IBM trademarked terms are marked on their first occurrence in this information with a trademark
symbol (® or ™), these symbols indicate U.S. registered or common law trademarks owned by IBM at the time this information was published. Such
trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at “Copyright and
trademark information” at www.ibm.com/legal/copytrade.shtml
Other company, product, or service names may be trademarks or service marks of others.

More Related Content

What's hot

Alternatives of JPA/Hibernate
Alternatives of JPA/HibernateAlternatives of JPA/Hibernate
Alternatives of JPA/HibernateSunghyouk Bae
 
Oracle Database Advanced Querying (2016)
Oracle Database Advanced Querying (2016)Oracle Database Advanced Querying (2016)
Oracle Database Advanced Querying (2016)Zohar Elkayam
 
Squeak DBX
Squeak DBXSqueak DBX
Squeak DBXESUG
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO DevsWO Community
 
The art of querying – newest and advanced SQL techniques
The art of querying – newest and advanced SQL techniquesThe art of querying – newest and advanced SQL techniques
The art of querying – newest and advanced SQL techniquesZohar Elkayam
 
SenchaCon 2016: Modernizing the Ext JS Class System - Don Griffin
SenchaCon 2016: Modernizing the Ext JS Class System - Don GriffinSenchaCon 2016: Modernizing the Ext JS Class System - Don Griffin
SenchaCon 2016: Modernizing the Ext JS Class System - Don GriffinSencha
 
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...dotNet Miami
 
The Ring programming language version 1.5.2 book - Part 27 of 181
The Ring programming language version 1.5.2 book - Part 27 of 181The Ring programming language version 1.5.2 book - Part 27 of 181
The Ring programming language version 1.5.2 book - Part 27 of 181Mahmoud Samir Fayed
 
BASTA 2013: Custom OData Provider
BASTA 2013: Custom OData ProviderBASTA 2013: Custom OData Provider
BASTA 2013: Custom OData ProviderRainer Stropek
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not JavaChris Adamson
 
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffJAX London
 
PL/SQL New and Advanced Features for Extreme Performance
PL/SQL New and Advanced Features for Extreme PerformancePL/SQL New and Advanced Features for Extreme Performance
PL/SQL New and Advanced Features for Extreme PerformanceZohar Elkayam
 
Oracle Database Advanced Querying
Oracle Database Advanced QueryingOracle Database Advanced Querying
Oracle Database Advanced QueryingZohar Elkayam
 

What's hot (20)

COScheduler
COSchedulerCOScheduler
COScheduler
 
Alternatives of JPA/Hibernate
Alternatives of JPA/HibernateAlternatives of JPA/Hibernate
Alternatives of JPA/Hibernate
 
Oracle Database Advanced Querying (2016)
Oracle Database Advanced Querying (2016)Oracle Database Advanced Querying (2016)
Oracle Database Advanced Querying (2016)
 
Squeak DBX
Squeak DBXSqueak DBX
Squeak DBX
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
 
The art of querying – newest and advanced SQL techniques
The art of querying – newest and advanced SQL techniquesThe art of querying – newest and advanced SQL techniques
The art of querying – newest and advanced SQL techniques
 
Practical ERSync
Practical ERSyncPractical ERSync
Practical ERSync
 
SenchaCon 2016: Modernizing the Ext JS Class System - Don Griffin
SenchaCon 2016: Modernizing the Ext JS Class System - Don GriffinSenchaCon 2016: Modernizing the Ext JS Class System - Don Griffin
SenchaCon 2016: Modernizing the Ext JS Class System - Don Griffin
 
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
 
The Ring programming language version 1.5.2 book - Part 27 of 181
The Ring programming language version 1.5.2 book - Part 27 of 181The Ring programming language version 1.5.2 book - Part 27 of 181
The Ring programming language version 1.5.2 book - Part 27 of 181
 
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter PilgrimJavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
 
jQuery Objects
jQuery ObjectsjQuery Objects
jQuery Objects
 
BASTA 2013: Custom OData Provider
BASTA 2013: Custom OData ProviderBASTA 2013: Custom OData Provider
BASTA 2013: Custom OData Provider
 
CDI 2.0 Deep Dive
CDI 2.0 Deep DiveCDI 2.0 Deep Dive
CDI 2.0 Deep Dive
 
Couchbas for dummies
Couchbas for dummiesCouchbas for dummies
Couchbas for dummies
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not Java
 
Kotlin talk
Kotlin talkKotlin talk
Kotlin talk
 
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard Wolff
 
PL/SQL New and Advanced Features for Extreme Performance
PL/SQL New and Advanced Features for Extreme PerformancePL/SQL New and Advanced Features for Extreme Performance
PL/SQL New and Advanced Features for Extreme Performance
 
Oracle Database Advanced Querying
Oracle Database Advanced QueryingOracle Database Advanced Querying
Oracle Database Advanced Querying
 

Viewers also liked

D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpagesD8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpagesCERTyou Formation
 
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMichael Smith
 
Building Responsive Applications Using XPages
Building Responsive Applications Using XPagesBuilding Responsive Applications Using XPages
Building Responsive Applications Using XPagesTeamstudio
 
Using Cool New Frameworks in (Mobile) Domino Apps
Using Cool New Frameworks in (Mobile) Domino AppsUsing Cool New Frameworks in (Mobile) Domino Apps
Using Cool New Frameworks in (Mobile) Domino AppsTeamstudio
 
A Beard, An App, A Blender
A Beard, An App, A BlenderA Beard, An App, A Blender
A Beard, An App, A Blenderedm00se
 
AD1542 Get Hands On With Bluemix
AD1542 Get Hands On With BluemixAD1542 Get Hands On With Bluemix
AD1542 Get Hands On With BluemixMartin Donnelly
 
IBM Connect 2016 - AD1548 - Building Responsive XPages Applications
IBM Connect 2016 - AD1548 - Building Responsive XPages ApplicationsIBM Connect 2016 - AD1548 - Building Responsive XPages Applications
IBM Connect 2016 - AD1548 - Building Responsive XPages Applicationsbeglee
 
What the App? : A Modernization Strategy for Your Business Applications
What the App? : A Modernization Strategy for Your Business ApplicationsWhat the App? : A Modernization Strategy for Your Business Applications
What the App? : A Modernization Strategy for Your Business ApplicationsJohn Head
 
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...Teamstudio
 
Speed geeking-lotusscript
Speed geeking-lotusscriptSpeed geeking-lotusscript
Speed geeking-lotusscriptBill Buchan
 
AD1279 "Marty, You're Not Thinking Fourth Dimensionally" - Troubleshooting XP...
AD1279 "Marty, You're Not Thinking Fourth Dimensionally" - Troubleshooting XP...AD1279 "Marty, You're Not Thinking Fourth Dimensionally" - Troubleshooting XP...
AD1279 "Marty, You're Not Thinking Fourth Dimensionally" - Troubleshooting XP...Paul Withers
 

Viewers also liked (11)

D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpagesD8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
 
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
 
Building Responsive Applications Using XPages
Building Responsive Applications Using XPagesBuilding Responsive Applications Using XPages
Building Responsive Applications Using XPages
 
Using Cool New Frameworks in (Mobile) Domino Apps
Using Cool New Frameworks in (Mobile) Domino AppsUsing Cool New Frameworks in (Mobile) Domino Apps
Using Cool New Frameworks in (Mobile) Domino Apps
 
A Beard, An App, A Blender
A Beard, An App, A BlenderA Beard, An App, A Blender
A Beard, An App, A Blender
 
AD1542 Get Hands On With Bluemix
AD1542 Get Hands On With BluemixAD1542 Get Hands On With Bluemix
AD1542 Get Hands On With Bluemix
 
IBM Connect 2016 - AD1548 - Building Responsive XPages Applications
IBM Connect 2016 - AD1548 - Building Responsive XPages ApplicationsIBM Connect 2016 - AD1548 - Building Responsive XPages Applications
IBM Connect 2016 - AD1548 - Building Responsive XPages Applications
 
What the App? : A Modernization Strategy for Your Business Applications
What the App? : A Modernization Strategy for Your Business ApplicationsWhat the App? : A Modernization Strategy for Your Business Applications
What the App? : A Modernization Strategy for Your Business Applications
 
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
 
Speed geeking-lotusscript
Speed geeking-lotusscriptSpeed geeking-lotusscript
Speed geeking-lotusscript
 
AD1279 "Marty, You're Not Thinking Fourth Dimensionally" - Troubleshooting XP...
AD1279 "Marty, You're Not Thinking Fourth Dimensionally" - Troubleshooting XP...AD1279 "Marty, You're Not Thinking Fourth Dimensionally" - Troubleshooting XP...
AD1279 "Marty, You're Not Thinking Fourth Dimensionally" - Troubleshooting XP...
 

Similar to Connect 2016-Move Your XPages Applications to the Fast Lane

Move Your XPages Applications to the Fast Lane
Move Your XPages Applications to the Fast LaneMove Your XPages Applications to the Fast Lane
Move Your XPages Applications to the Fast LaneTeamstudio
 
Ltc Meeting 20120507
Ltc Meeting 20120507Ltc Meeting 20120507
Ltc Meeting 20120507LearningTech
 
The Pill for Your Migration Hell
The Pill for Your Migration HellThe Pill for Your Migration Hell
The Pill for Your Migration HellDatabricks
 
The Possibilities and Pitfalls of Writing Your Own State Stores with Daan Gertis
The Possibilities and Pitfalls of Writing Your Own State Stores with Daan GertisThe Possibilities and Pitfalls of Writing Your Own State Stores with Daan Gertis
The Possibilities and Pitfalls of Writing Your Own State Stores with Daan GertisHostedbyConfluent
 
DDD in Pixel Federation volume 2
DDD in Pixel Federation volume 2DDD in Pixel Federation volume 2
DDD in Pixel Federation volume 2Pixel Federation
 
SparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDsSparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDsDatabricks
 
10 minutes fun with Cloud API comparison
10 minutes fun with Cloud API comparison10 minutes fun with Cloud API comparison
10 minutes fun with Cloud API comparisonLaurent Cerveau
 
SQL Server Deep Dive, Denis Reznik
SQL Server Deep Dive, Denis ReznikSQL Server Deep Dive, Denis Reznik
SQL Server Deep Dive, Denis ReznikSigma Software
 
Stream processing from single node to a cluster
Stream processing from single node to a clusterStream processing from single node to a cluster
Stream processing from single node to a clusterGal Marder
 
React.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMReact.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMJimit Shah
 
Deep Dive Into Catalyst: Apache Spark 2.0’s Optimizer
Deep Dive Into Catalyst: Apache Spark 2.0’s OptimizerDeep Dive Into Catalyst: Apache Spark 2.0’s Optimizer
Deep Dive Into Catalyst: Apache Spark 2.0’s OptimizerDatabricks
 
3 boyd direct3_d12 (1)
3 boyd direct3_d12 (1)3 boyd direct3_d12 (1)
3 boyd direct3_d12 (1)mistercteam
 
Automated Data Synchronization: Data Loader, Data Mirror & Beyond
Automated Data Synchronization: Data Loader, Data Mirror & BeyondAutomated Data Synchronization: Data Loader, Data Mirror & Beyond
Automated Data Synchronization: Data Loader, Data Mirror & BeyondJeremyOtt5
 
TechEvent 2019: Oracle to PostgreSQL - a Travel Guide from Practice; Roland S...
TechEvent 2019: Oracle to PostgreSQL - a Travel Guide from Practice; Roland S...TechEvent 2019: Oracle to PostgreSQL - a Travel Guide from Practice; Roland S...
TechEvent 2019: Oracle to PostgreSQL - a Travel Guide from Practice; Roland S...Trivadis
 
Single Page Applications with AngularJS 2.0
Single Page Applications with AngularJS 2.0 Single Page Applications with AngularJS 2.0
Single Page Applications with AngularJS 2.0 Sumanth Chinthagunta
 
Spark Summit EU talk by Nick Pentreath
Spark Summit EU talk by Nick PentreathSpark Summit EU talk by Nick Pentreath
Spark Summit EU talk by Nick PentreathSpark Summit
 
Back to FME School - Day 1: Your Data and FME
Back to FME School - Day 1: Your Data and FMEBack to FME School - Day 1: Your Data and FME
Back to FME School - Day 1: Your Data and FMESafe Software
 
[DataCon.TW 2018] Metadata Store: Generalized Entity Database for Intelligenc...
[DataCon.TW 2018] Metadata Store: Generalized Entity Database for Intelligenc...[DataCon.TW 2018] Metadata Store: Generalized Entity Database for Intelligenc...
[DataCon.TW 2018] Metadata Store: Generalized Entity Database for Intelligenc...Jeff Hung
 

Similar to Connect 2016-Move Your XPages Applications to the Fast Lane (20)

XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
 
Move Your XPages Applications to the Fast Lane
Move Your XPages Applications to the Fast LaneMove Your XPages Applications to the Fast Lane
Move Your XPages Applications to the Fast Lane
 
Ltc Meeting 20120507
Ltc Meeting 20120507Ltc Meeting 20120507
Ltc Meeting 20120507
 
The Pill for Your Migration Hell
The Pill for Your Migration HellThe Pill for Your Migration Hell
The Pill for Your Migration Hell
 
Meetup talk
Meetup talkMeetup talk
Meetup talk
 
The Possibilities and Pitfalls of Writing Your Own State Stores with Daan Gertis
The Possibilities and Pitfalls of Writing Your Own State Stores with Daan GertisThe Possibilities and Pitfalls of Writing Your Own State Stores with Daan Gertis
The Possibilities and Pitfalls of Writing Your Own State Stores with Daan Gertis
 
DDD in Pixel Federation volume 2
DDD in Pixel Federation volume 2DDD in Pixel Federation volume 2
DDD in Pixel Federation volume 2
 
SparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDsSparkSQL: A Compiler from Queries to RDDs
SparkSQL: A Compiler from Queries to RDDs
 
10 minutes fun with Cloud API comparison
10 minutes fun with Cloud API comparison10 minutes fun with Cloud API comparison
10 minutes fun with Cloud API comparison
 
SQL Server Deep Dive, Denis Reznik
SQL Server Deep Dive, Denis ReznikSQL Server Deep Dive, Denis Reznik
SQL Server Deep Dive, Denis Reznik
 
Stream processing from single node to a cluster
Stream processing from single node to a clusterStream processing from single node to a cluster
Stream processing from single node to a cluster
 
React.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMReact.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOM
 
Deep Dive Into Catalyst: Apache Spark 2.0’s Optimizer
Deep Dive Into Catalyst: Apache Spark 2.0’s OptimizerDeep Dive Into Catalyst: Apache Spark 2.0’s Optimizer
Deep Dive Into Catalyst: Apache Spark 2.0’s Optimizer
 
3 boyd direct3_d12 (1)
3 boyd direct3_d12 (1)3 boyd direct3_d12 (1)
3 boyd direct3_d12 (1)
 
Automated Data Synchronization: Data Loader, Data Mirror & Beyond
Automated Data Synchronization: Data Loader, Data Mirror & BeyondAutomated Data Synchronization: Data Loader, Data Mirror & Beyond
Automated Data Synchronization: Data Loader, Data Mirror & Beyond
 
TechEvent 2019: Oracle to PostgreSQL - a Travel Guide from Practice; Roland S...
TechEvent 2019: Oracle to PostgreSQL - a Travel Guide from Practice; Roland S...TechEvent 2019: Oracle to PostgreSQL - a Travel Guide from Practice; Roland S...
TechEvent 2019: Oracle to PostgreSQL - a Travel Guide from Practice; Roland S...
 
Single Page Applications with AngularJS 2.0
Single Page Applications with AngularJS 2.0 Single Page Applications with AngularJS 2.0
Single Page Applications with AngularJS 2.0
 
Spark Summit EU talk by Nick Pentreath
Spark Summit EU talk by Nick PentreathSpark Summit EU talk by Nick Pentreath
Spark Summit EU talk by Nick Pentreath
 
Back to FME School - Day 1: Your Data and FME
Back to FME School - Day 1: Your Data and FMEBack to FME School - Day 1: Your Data and FME
Back to FME School - Day 1: Your Data and FME
 
[DataCon.TW 2018] Metadata Store: Generalized Entity Database for Intelligenc...
[DataCon.TW 2018] Metadata Store: Generalized Entity Database for Intelligenc...[DataCon.TW 2018] Metadata Store: Generalized Entity Database for Intelligenc...
[DataCon.TW 2018] Metadata Store: Generalized Entity Database for Intelligenc...
 

More from Howard Greenberg

January OpenNTF Webinar - Backup your Domino Server - New Options in V12
January OpenNTF Webinar - Backup your Domino Server - New Options in V12January OpenNTF Webinar - Backup your Domino Server - New Options in V12
January OpenNTF Webinar - Backup your Domino Server - New Options in V12Howard Greenberg
 
October OpenNTF Webinar - What we like about Domino/Notes 12, recommended new...
October OpenNTF Webinar - What we like about Domino/Notes 12, recommended new...October OpenNTF Webinar - What we like about Domino/Notes 12, recommended new...
October OpenNTF Webinar - What we like about Domino/Notes 12, recommended new...Howard Greenberg
 
September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)
September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)
September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)Howard Greenberg
 
August OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub ExplainedAugust OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub ExplainedHoward Greenberg
 
July OpenNTF Webinar - HCL Presents Keep, a new API for Domino
July OpenNTF Webinar - HCL Presents Keep, a new API for DominoJuly OpenNTF Webinar - HCL Presents Keep, a new API for Domino
July OpenNTF Webinar - HCL Presents Keep, a new API for DominoHoward Greenberg
 
June OpenNTF Webinar - Domino V12 Certification Manager
June OpenNTF Webinar - Domino V12 Certification ManagerJune OpenNTF Webinar - Domino V12 Certification Manager
June OpenNTF Webinar - Domino V12 Certification ManagerHoward Greenberg
 
April, 2021 OpenNTF Webinar - Domino Administration Best Practices
April, 2021 OpenNTF Webinar - Domino Administration Best PracticesApril, 2021 OpenNTF Webinar - Domino Administration Best Practices
April, 2021 OpenNTF Webinar - Domino Administration Best PracticesHoward Greenberg
 
OpenNTF Webinar, March, 2021
OpenNTF Webinar, March, 2021OpenNTF Webinar, March, 2021
OpenNTF Webinar, March, 2021Howard Greenberg
 
February OpenNTF Webinar: Introduction to Ansible for Newbies
February OpenNTF Webinar: Introduction to Ansible for NewbiesFebruary OpenNTF Webinar: Introduction to Ansible for Newbies
February OpenNTF Webinar: Introduction to Ansible for NewbiesHoward Greenberg
 
January OpenNTF Webinar: 4D - Domino Docker Deep Dive
January OpenNTF Webinar: 4D - Domino Docker Deep DiveJanuary OpenNTF Webinar: 4D - Domino Docker Deep Dive
January OpenNTF Webinar: 4D - Domino Docker Deep DiveHoward Greenberg
 
December OpenNTF Webinar: The Volt MX LotusScript Toolkit
December OpenNTF Webinar: The Volt MX LotusScript ToolkitDecember OpenNTF Webinar: The Volt MX LotusScript Toolkit
December OpenNTF Webinar: The Volt MX LotusScript ToolkitHoward Greenberg
 
OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1
OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1
OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1Howard Greenberg
 
OpenNTF Webinar, October 2020
OpenNTF Webinar, October 2020OpenNTF Webinar, October 2020
OpenNTF Webinar, October 2020Howard Greenberg
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchHoward Greenberg
 
July 2020 OpenNTF Webinar - Hear the Latest from the User Groups!
July 2020 OpenNTF Webinar - Hear the Latest from the User Groups!July 2020 OpenNTF Webinar - Hear the Latest from the User Groups!
July 2020 OpenNTF Webinar - Hear the Latest from the User Groups!Howard Greenberg
 
OpenNTF Webinar, May 19, 2020
OpenNTF Webinar, May 19, 2020OpenNTF Webinar, May 19, 2020
OpenNTF Webinar, May 19, 2020Howard Greenberg
 
Dev112 let's calendar that
Dev112   let's calendar thatDev112   let's calendar that
Dev112 let's calendar thatHoward Greenberg
 
Bp101-Can Domino Be Hacked
Bp101-Can Domino Be HackedBp101-Can Domino Be Hacked
Bp101-Can Domino Be HackedHoward Greenberg
 

More from Howard Greenberg (20)

January OpenNTF Webinar - Backup your Domino Server - New Options in V12
January OpenNTF Webinar - Backup your Domino Server - New Options in V12January OpenNTF Webinar - Backup your Domino Server - New Options in V12
January OpenNTF Webinar - Backup your Domino Server - New Options in V12
 
BRPA November Meeting
BRPA November MeetingBRPA November Meeting
BRPA November Meeting
 
October OpenNTF Webinar - What we like about Domino/Notes 12, recommended new...
October OpenNTF Webinar - What we like about Domino/Notes 12, recommended new...October OpenNTF Webinar - What we like about Domino/Notes 12, recommended new...
October OpenNTF Webinar - What we like about Domino/Notes 12, recommended new...
 
September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)
September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)
September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)
 
August OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub ExplainedAugust OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub Explained
 
July OpenNTF Webinar - HCL Presents Keep, a new API for Domino
July OpenNTF Webinar - HCL Presents Keep, a new API for DominoJuly OpenNTF Webinar - HCL Presents Keep, a new API for Domino
July OpenNTF Webinar - HCL Presents Keep, a new API for Domino
 
June OpenNTF Webinar - Domino V12 Certification Manager
June OpenNTF Webinar - Domino V12 Certification ManagerJune OpenNTF Webinar - Domino V12 Certification Manager
June OpenNTF Webinar - Domino V12 Certification Manager
 
April, 2021 OpenNTF Webinar - Domino Administration Best Practices
April, 2021 OpenNTF Webinar - Domino Administration Best PracticesApril, 2021 OpenNTF Webinar - Domino Administration Best Practices
April, 2021 OpenNTF Webinar - Domino Administration Best Practices
 
OpenNTF Webinar, March, 2021
OpenNTF Webinar, March, 2021OpenNTF Webinar, March, 2021
OpenNTF Webinar, March, 2021
 
February OpenNTF Webinar: Introduction to Ansible for Newbies
February OpenNTF Webinar: Introduction to Ansible for NewbiesFebruary OpenNTF Webinar: Introduction to Ansible for Newbies
February OpenNTF Webinar: Introduction to Ansible for Newbies
 
January OpenNTF Webinar: 4D - Domino Docker Deep Dive
January OpenNTF Webinar: 4D - Domino Docker Deep DiveJanuary OpenNTF Webinar: 4D - Domino Docker Deep Dive
January OpenNTF Webinar: 4D - Domino Docker Deep Dive
 
December OpenNTF Webinar: The Volt MX LotusScript Toolkit
December OpenNTF Webinar: The Volt MX LotusScript ToolkitDecember OpenNTF Webinar: The Volt MX LotusScript Toolkit
December OpenNTF Webinar: The Volt MX LotusScript Toolkit
 
OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1
OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1
OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1
 
OpenNTF Webinar, October 2020
OpenNTF Webinar, October 2020OpenNTF Webinar, October 2020
OpenNTF Webinar, October 2020
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
 
July 2020 OpenNTF Webinar - Hear the Latest from the User Groups!
July 2020 OpenNTF Webinar - Hear the Latest from the User Groups!July 2020 OpenNTF Webinar - Hear the Latest from the User Groups!
July 2020 OpenNTF Webinar - Hear the Latest from the User Groups!
 
Open ntf 2020-jun
Open ntf 2020-junOpen ntf 2020-jun
Open ntf 2020-jun
 
OpenNTF Webinar, May 19, 2020
OpenNTF Webinar, May 19, 2020OpenNTF Webinar, May 19, 2020
OpenNTF Webinar, May 19, 2020
 
Dev112 let's calendar that
Dev112   let's calendar thatDev112   let's calendar that
Dev112 let's calendar that
 
Bp101-Can Domino Be Hacked
Bp101-Can Domino Be HackedBp101-Can Domino Be Hacked
Bp101-Can Domino Be Hacked
 

Recently uploaded

Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
cpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.pptcpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.pptrcbcrtm
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 

Recently uploaded (20)

Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
cpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.pptcpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.ppt
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 

Connect 2016-Move Your XPages Applications to the Fast Lane

  • 1. AD-1094 : Move Your XPages Applications to the Fast Lane Howard Greenberg, Partner, TLCC February 1, 2016
  • 2. Move your XPages Applications to the Fast Lane 2 Are your XPages Apps are like this???
  • 3. Your Presenter Today – Howard Greenberg • Certified Lotus Instructor since R3 • Co-founded TLCC in 1997 • IBM Champion • Prior to that 12 years at IBM in the PC group • Also… – Certified Public Accountant – Certified Information Systems Auditor (CISA) – Certified Flight Instructor 3
  • 4. Agenda • What affects XPages Peformance • XPages Lifecycle • Partial Refresh vs. Partial Execution • Tools to Analyze Peformance • Case Studies • Questions??? 4
  • 5. What affects XPages Performance? 5 Client: Browser OS CPU Hard drive Memory Network Speed and Latency Server: Hardware OS Application (Domino)
  • 6. What’s Involved on the Server... • Server HW and OS pass network request to Domino • Domino networking and HTTP Task • XPages runtime engine – Restore state (might read from disk) – Java code builds HTML, etc. that gets sent to browser • Uses the JSF Lifecycle (more on this later) • Calls Backend Domino objects if needed • Domino passes response (HTML, CSS, JS, etc.) to OS and via network to client 6
  • 8. JSF Life Cycle - Post 8 Restore View •Restore component tree •Events: •afterRestoreView Apply Request Values •Copy data to Editable controls Process Validations •Validations •Converters Update Model Values •Move values to data source Invoke Application •Application logic •Events: •onClientLoad (XPage, etc) •on… events of button, etc. Render Response •Convert to HTML, etc. •Events: •beforeRenderReponse •afterRenderResponse Request Response
  • 9. Lifecycle1 XPage – Initial Page Load (GET Request) 9 Render Response •Rendered property for id: label1 •Label property for id: label1 •Rendered property for id: inputText1 •Default value property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •values property for id: comboBox1 •values property for id: comboBox1 •Rendered property for id: computedField1 •Value property for id: computedField1 •Rendered property for id: computedField2 •Value property for id: computedField2 12 SSJS Calls
  • 10. Lifecyle1 – Submit POST Request (Full Update) Restore View Apply Request Values (8) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Process Validations (11) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Validation for inputText1 •Default value property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •values property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Update Model Values (8) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Invoke Application (1) •OnClick event for id: button1 Render Response (11) •Rendered property for id: label1 •Label property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •values property for id: comboBox1 •values property for id: comboBox1 •Rendered property for id: computedField1 •Value property for id: computedField1 •Rendered property for id: computedField2 •Value property for id: computedField239 SSJS Calls 10
  • 11. When to Execute - # vs $ • # is Compute dynamically – Executed every time the page is rendered – Use for values that are likely to change • $ is Compute on Page Load – Executed when the page is first loaded – Use for values that don't change 11 <xp:label id="label1"> <xp:this.value> <![CDATA[#{javascript:return “My Label”;}]]> </xp:this.value> </xp:label>
  • 12. Lifecyle2 – Submit (Full Update) - On Page Load 12 Restore View Apply Request Values •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Process Validations (2) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Validation for inputText1 •Default value property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •values property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Update Model Values •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Invoke Application (1) •OnClick event for id: button1 Render Response (3) •Rendered property for id: label1 •Label property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •values property for id: comboBox1 •values property for id: comboBox1 •Rendered property for id: computedField1 •Value property for id: computedField1 •Rendered property for id: computedField2 •Value property for id: computedField2 6 SSJS Calls, saved 33 Changed all Rendered and Values (comboBox) to only compute on Page Load
  • 13. Options for dynamically computing the Rendered: • Scoped variables – Still get calculated but do the heavy lifting once and then read the scoped variable in the Rendered property • DataContexts – Compute a value at the Xpage or Panel level once – Refer to the value using EL (much faster than SSJS) 13 But I need dynamic Rendering!
  • 14. DataContext - Pitfall • Be careful binding data context variables dynamically – They will be recomputed multiple times, even when in partial execution mode and if they are not in use (six times!) • Apply Request Values • Process Validations • Update Model Values • Invoke Application • Twice in Render Response! • If computed on page load only computed when page loads • See Paul Withers blog entry to learn how to set a data context value via code 14
  • 15. Partial Refresh vs. Partial Execution? • Partial Refresh (Update) – Computes entire XPage, only sends back what is in the partial refresh id (refreshId) • Partial Execution – Only calculates what is in the area specified (execId) 15
  • 16. Partial Refresh Demo - Results 16 Restore View Apply Request Values (8) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Process Validations (11) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Validation for inputText1 •Default value property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •values property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Update Model Values (8) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Invoke Application (1) •OnClick event for id: button1 Render Response (2) •Rendered property for id: label1 •Label property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •values property for id: comboBox1 •values property for id: comboBox1 •Rendered property for id: computedField1 •Value property for id: computedField1 •Rendered property for id: computedField2 •Value property for id: computedField2 30 SSJS Calls, saved 9 Only Savings were here!
  • 17. Partial Refresh Pros and Cons • Pros – Reduced control processing in the render response phase – Smaller response from server • Means reduced network usage – Better UI experience • Rest of the page is still visible while waiting for a response • Cons – Controls like computed fields outside refresh area don’t refresh – Be careful turning this on for a completed XPage (TEST!) – Can only update one area (one id) • Workaround from Tim Tripcony on XPages Wiki 17
  • 18. Partial Execution Demo - Results 18 Restore View Apply Request Values (1) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Process Validations (1) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Validation for inputText1 •Default value property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •values property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Update Model Values (1) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Invoke Application (1) •OnClick event for id: button1 Render Response (12) •Rendered property for id: label1 •Label property for id: label1 •Rendered property for id: inputText1 •Default value property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •values property for id: comboBox1 •values property for id: comboBox1 •Rendered property for id: computedField1 •Value property for id: computedField1 •Rendered property for id: computedField2 •Value property for id: computedField2 16 SSJS Calls Saved 13
  • 19. Partial Execution Pros and Cons • Pros – Reduced processing in the 3 data-processing phases • Cons – Control with onClick event has to be inside the execId area – Editable values outside of the executed area do not get submitted/updated (reset to default values) – Existing XPages need analysis/testing before using this • Current onclick events might refer to controls where the data is not submitted – ExecMode available in 8.5.1 – Have to use source to enter ExecId in 8.5 (9.0 has Designer UI) 19
  • 20. Partial Refresh AND Execution Demo - Results Restore View Apply Request Values (1) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Process Validations (1) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Validation for inputText1 •Default value property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •values property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Update Model Values (1) •Rendered property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •Rendered property for id: comboBox1 •Rendered property for id: computedField1 •Rendered property for id: computedField2 Invoke Application (1) •OnClick event for id: button1 Render Response (2) •Rendered property for id: label1 •Label property for id: label1 •Rendered property for id: inputText1 •Rendered property for id: label2 •Rendered property for id: comboBox1 •values property for id: comboBox1 •values property for id: comboBox1 •Rendered property for id: computedField1 •Value property for id: computedField1 •Rendered property for id: computedField2 •Value property for id: computedField2 6 SSJS Calls, saved 33 20
  • 21. Using the loaded Property • Loaded = true – In component tree • Loaded = false – Control is not created – Can never be rendered or accessed – Saves memory too 21 Loaded only computed once in the createView phase
  • 22. Watch Out for @DbLookup • @DbLookup about 3-4 times slower than SSJS – res = @DbLookup(db,"CustomersByNameView",names[i], "phone"); vs. – doc = vw.getDocumentByKey(names[i], true); res = doc.getItemValueString("phone"); • Five lookups repeated 100 times – @DbLookup averaged about 1728ms – getDocumentByKey averaged 510ms • Other @Functions not tested 22
  • 23. Life Cycle Performance Suggestions • Most properties, like CSS “style” are only computed in the RenderResponse phase • Watch and minimize: – Rendered property (when dynamic) • Computed multiple times! • Use dataContexts or scoped variables when able • Use both Partial Refresh (Update) and Partial Execute when able 23
  • 24. Tools to Test/Debug Performance Issues • Print statements – In rendered/visible computations to see how often executed • print("panel2 evaluating rendered property"); – In the XPages events such as: • before/afterPageLoad, afterRestoreView, before/afterRenderResponse – In the document data source events: • queryNewDocument, postSaveDocument, etc. – Or use the Debug Toolbar (don‘t have to view server console) • http://www.openntf.org/main.nsf/project.xsp?r=project/ XPage%20Debug%20Toolbar 24
  • 25. More Tools • Server OS tools to monitor CPU, memory and network • Browser developer tools – for watching network transactions, partial updates, response times – BROWSER: Firebug, Chrome, etc. developer tools – XPiNC: FirebugLite from ExtLib • Java / Javascript Debugging – Degrades performance but can inspect objects • Use the Eclipse Java debugger 25
  • 26. 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 is added to the JVM directory – Modify the security policy file – Notes.ini is modified (all in the documentation!) • Measures CPU performance and memory allocation • Available from OpenNTF.org – Free open source project – http://www.openntf.org/main.nsf/project.xsp?r=project/XPa ges%20Toolbox 26
  • 27. XPages Toolbox Functionality • Measures CPU and Wall time • Back end Domino object profiling • Run time monitor (memory) • Session dumps (XML file) • Heap dump of the JVM running in the HTTP task – Or from the Domino console (or from your code) • 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 (need to also install the IBM dump tool) http://www.eclipse.org/mat/ http://www.ibm.com/developerworks/java/jdk/tools/dtfj.html • Thread Monitoring 27
  • 28. CPU Profiler – See how long and where... 28
  • 29. Back End (Domino) Profiler 29
  • 30. • Simple Repeat – what could be wrong? – Configuration Lookups to get other nsf names – Lookups to get “role” of user – Opening Notes document to get values – Computed view value – Complicated rendered formula in repeat Case Study 1 - Repeat 30
  • 31. • Add Application Scope variables to store database names • Or (better yet) create an ApplicationBean in Java Case Study 1 – First Step add scoped variable for Config (db names) 31 To retrieve:
  • 32. Improvement – Repeat_Config 32 Xpage Calls Time CPU Time Calls(%) BE Time(%) CPU Time(%) Start 3564 1547 1688 Cache Config 2499 733 1016 143% 211% 166%
  • 33. • Add App Scope variable to store user roles • No more @DbLookup in rendered – Pulls value from memory - much faster! Case Study 1 – Next add scoped variable for User Information 33 To retrieve:
  • 34. Improvement – Repeat_User 34 All previous changes are cumulative.... Xpage Calls Time CPU Time Calls(%) BE Time(%) CPU Time(%) Start 3564 1547 1688 Cache Config 2499 733 1016 143% 211% 166% Cache User 1992 265 469 179% 584% 360%
  • 35. • Avoid opening NotesDocument object to get values not in the view – Created a new view with missing columns – Changed reference to use EL for all but two columns that need to lookup in another DB Case Study 1 – Next create a new view 35
  • 36. Improvement – Repeat_BetterView 36 All previous changes are cumulative.... Xpage Calls Time CPU Time Calls(%) BE Time(%) CPU Time(%) Start 3564 1547 1688 Cache Config 2499 733 1016 143% 211% 166% Cache User 1992 265 469 179% 584% 360% Better View 1656 283 375 215% 547% 450%
  • 37. • Avoid doing the @Dblookup to get the sales person based on the region • Use a Bean to cache Region/Salesperson data – HashMap: key is region name, value is salesperson – Application scope (shared by all users) Lookup the Sales Person from a Bean 37
  • 38. Improvement – Repeat_CacheRegion 38 All previous changes are cumulative.... Xpage Calls Time CPU Time Calls(%) BE Time(%) CPU Time(%) Start 3564 1547 1688 Cache Config 2499 733 1016 143% 211% 166% Cache User 1992 265 469 179% 584% 360% Better View 1656 283 375 215% 547% 450% Cache Region 1614 93 250 221% 1663% 675%
  • 39. • Store Sales Total by Customer in HashMap – viewScope Managed Bean • Caches sales total, key is customer name • Also use ViewNavigator to get totals via getNextCategory() – Fast initialization of HashMap Next Try: Use Java to Cache Sales Lookup 39 SSJS call to Bean
  • 40. Improvement – Repeat_ComputeSalesJava 40 All previous changes are cumulative.... Xpage Calls Time CPU Time Calls(%) BE Time(%) CPU Time(%) Start 3564 1547 1688 Cache Config 2499 733 1016 143% 211% 166% Cache User 1992 265 469 179% 584% 360% Better View 1656 283 375 215% 547% 450% Cache Region 1614 93 250 221% 1663% 675% Compute Sales - Java 816 16 172 437% 9669% 981%
  • 41. • CustomerBean – passes Collection of customer objects to Repeat – The scope could be request, view, or application • CacheBean – Long lived information – Config settings (database path and name) – User profile (manager, sales rep or user) – Region information (get Sales person for region) – Application Scope Do Everything in Java! 41
  • 43. Improvement – Repeat_AllJava 43 Xpage Calls Time CPU Time Calls(%) BE Time(%) CPU Time(%) Start 3564 1547 1688 Cache Config 2499 733 1016 143% 211% 166% Cache User 1992 265 469 179% 584% 360% Better View 1656 283 375 215% 547% 450% Cache Region 1614 93 250 221% 1663% 675% Compute Sales - Java 816 16 172 437% 9669% 981% All Java (request scope) 401 47 141 889% 3291% 1197% All Java (view scope) 6 0 109 59400% NA 1549%
  • 44. Performance Improvement for Case Study 1 44 0 500 1000 1500 2000 2500 3000 3500 4000 AxisTitle Calls Time CPU Time
  • 45. Case Study 2: Partial Refresh and Execution • Added a lookup to compute sales by region – Full Update/Exec – Partial Refresh – Partial Exec – Both 45 Xpage Calls Time CPU Time Calls (%) BE Time (%) CPU Time(%) Start 1918 1109 1375 Refresh 516 672 781 691% 230% 216% Exec 1414 610 688 252% 254% 245% Both 12 31 78 29700% 4990% 2164% 0 500 1000 1500 2000 2500 Start Refresh Exec Both Calls Time CPU Time
  • 46. Case Study 3: Data Contexts • Compare Data Context (on page load vs. dynamic) – Two data context variables 46 Xpage Calls Time Wall Time Calls (%) BE Time (%) CPU Time(%) Dynamic 24 47 467 On Page Load 2 16 99 1200% 293% 472%
  • 47. Recap • Think about performance when designing – JSF Lifecycle • Avoiding computations in rendered – Cache whenever possible • Scoped variables • Beans • Measure performance – Part of your testing processes – Look for ways to improve 47
  • 48. • TLCC Performance Webinar with Ulrich Krause and myself from October, 2013 – YouTube and Slides • Paul Withers blog (each link below is different) – Part 1, Part 2, Part 3 • Tony McGuckin’s Video - XPages Master class – 4 videos plus sample applications • IBM article on JSF (non XPages) • My Performance Webinar from October, 2015 – YouTube and Slides 48 Homework Time – Further References
  • 49. 49  Email: howardg@tlcc.com  Twitter: @TLCCLtd  Web: www.tlcc.com Download the Sample Application and presentation at: http://www.tlcc.com/connect Please do the online survey for this session! THANK YOU IN ADVANCE!
  • 50. Other Server Settings 50 The next slides contain other server settings you may want to review with your admin...
  • 51. Server Performance Variables • Hardware – CPU, Network, Memory, and Hard Drive • Operating System (Use 64 bit OS!) • Domino: – Memory Settings • HTTPJVMMaxHeapSize • Use HTTPJVMMaxHeapSizeSet=1 to prevent changes – Number of threads • See this article from IBM – Encryption (HTTPS) 51
  • 52. Optimizing Memory Utilization • xsp.persistence.mode - Set in XSP Properties file – 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) 52
  • 53. 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 53 On the Server: xsp.properties: xsp.resources.aggregate=true
  • 54. Acknowledgements and Disclaimers Availability. References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. The workshops, sessions and materials have been prepared by IBM or the session speakers and reflect their own views. They are provided for informational purposes only, and are neither intended to, nor shall have the effect of being, legal or other guidance or advice to any participant. While efforts were made to verify the completeness and accuracy of the information contained in this presentation, it is provided AS-IS without warranty of any kind, express or implied. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this presentation or any other materials. Nothing contained in this presentation is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software. All customer examples described are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual environmental costs and performance characteristics may vary by customer. Nothing contained in these materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results.
  • 55. Acknowledgements and Disclaimers cont. © Copyright IBM Corporation 2015. All rights reserved. • U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. • IBM, the IBM logo, ibm.com, and IBM Notes and Domino are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. If these and other IBM trademarked terms are marked on their first occurrence in this information with a trademark symbol (® or ™), these symbols indicate U.S. registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at “Copyright and trademark information” at www.ibm.com/legal/copytrade.shtml Other company, product, or service names may be trademarks or service marks of others.