ADF Faces Performance Tuning

 

ADF Faces Tuning

General

* User partial page navigation
* Use page templates
– Avoid using <f:subview> whenever possible
– Avoid long IDs
* Minimize ADF rich client geometry management
– Minimize number of child components within a parent geometry managed component such as:

PanelAccordion
PanelStretchLayout
PanelTabbed
BreadCrumbs
NavigationPane
PanelSplitter
Toolbar
Toolbox
Table
Train

* Minimize component overflow by setting a big enough initial size
– The components that have built-in support for overflow are:

PanelTabbed
BreadCrumbs
NavigationPane
PanelAccordion
Toolbar
Train

* Use PPR (partial page rendering) whenever possible
– Use panelTabbed (supports PPR) instead of navigationPane (no PPR)
* Cache resources whenever possible
– Cache all static resources (e.g. setup F5 Big-IP rules)
* Define custom styles at the top of the page
– Use metaContainer facet

<af:document title="#{attrs.documentTitle}" theme="dark">
<f:facet name="metaContainer">
<af:group><![CDATA[
<style type="text/css">
.TabletNavigationGlobal {
text-align: right;
padding-left: 0px;
padding-right: 10px;
white-space: nowrap;
}
HTML[dir=rtl] .TabletNavigationGlobal {
text-align: left;
padding-left: 10px;
padding-right: 0px;
}
</style>
]]>
<af:facetRef facetName="metaContainer"/>
</af:group>
</f:facet>
<af:form ...>
<af:facetRef facetName="body"/>
</af:form>
</af:document>

* Bundle custom JavaScript code and include needed module in client side use:

<af:resource type="javascript" source=" "/>

trinidad-config.xml Configurations

* Disable debug-ouput element (set to FALSE)
* Disable animation

web.xml Configurations

* Minimize state token cache size:
org.apache.myfaces.trinidad.CLIENT_STATE_MAX_TOKENS=
(2 to support one back button click) or (1 to disable support for back button)
* Disable test automation:
oracle.adf.view.rich.automation.ENABLED=FALSE (default)
* Disable client side assertions in web.xml:
oracle.adf.view.rich.ASSERT_ENABLED=FALSE (default)
* Disable JavaScript profiler:
oracle.adf.view.rich.profiler.ENABLED=FALSE
* Disable resource debug mode (so that static resources can be cached):
org.apache.myfaces.trinidad.resource.DEBUG=FALSE
* Disable timestamp checking:
org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION=FALSE (default)
* Disable css file checking:
org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION=FALSE
* Enable content compression:
DISABLE_CONTENT_COMPRESSION=FALSE
* Enable JavaScript obfuscation(to reduce file size):
org.apache.myfaces.trinidad.DEBUG_JAVASCRIPT=FALSE
* Enable library partitioning:
oracle.adf.view.rich.libraryPartitioning.DISABLED=FALSE
* Disable checking JSP file modifications
oracle.adf.view.rich.CHECK_FILE_MODIFICATION=FALSE
* oracle.adf.view.rich.CLIENT_STATE_METHOD=token (default)?
* oracle.adf.view.rich.LOGGER_LEVEL=OFF

<context-param>
  <param-name>oracle.adf.view.rich.LOGGER_LEVEL</param-name>
  <param-value>OFF</param-value>
</context-param>

Component Attributes

* Use immediate in certain cases
* Prefer rendered attribute over visible attribute
* Use client-side events whenever possible and prevent event propagation to server side (e.g. cancelling event at the end of processing)
* Use id attribute that is less than seven characters
* Use client-side components when necessary by useing clientComponent attribute
* Set the childCreation attribute on af:popup to deferred for a server-side performance enhancement.

Table and Tree Component Configurations

* Keep table fetch size and iterator range size in sync
* Disable column stretching (default)
* Minimize use of header rows and frozen columns

DVT Components

* Modify the RangeSize attribute
* Minimize vertical text

Others

* Turn on database table indexing when using autoSuggest

ADF Server Tuning

View Objects Tuning

* Use least resource intensive view objects (read-only, insert-only, etc)
* Configure view object data fetching behavior properly:
– Fetch mode
– Fetch size
– Max fetch size
– Forward-only mode
* Consider optimize large data set
* Disable “spillover” configuration when possible (i.e. set jbo.use.pers.coll=false)
* Review SQL style configuration (e.g. -Djbo.SQLBuilder=”SQL92″)
* Use bind variables for view object queries to maximize reuse.
* Use query optimizer hints
* Use dynamic SQL generation
* Use batch processing when possible (BatchThreshold property)
* Set RangeSize equal to number of records to be displayed in UI (avoid round trips)

Application Module (AM) Tuning

* Use large AM to minimize database connection instances.
* Use lazing loading (-Djbo.load.components.lazily=true)
* Use AM pooling (configure in bc4j.xcfg file)

References

* OFM 11g R1: Oracle Application Development Framework Performance Tuning

This entry was posted in adf. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

This site uses Akismet to reduce spam. Learn how your comment data is processed.