{"id":3797,"date":"2011-12-15T16:52:25","date_gmt":"2011-12-15T21:52:25","guid":{"rendered":"http:\/\/jianmingli.com\/wp\/?p=3797"},"modified":"2011-12-15T16:52:25","modified_gmt":"2011-12-15T21:52:25","slug":"adf-faces-performance-tuning","status":"publish","type":"post","link":"https:\/\/jianmingli.com\/wp\/?p=3797","title":{"rendered":"ADF Faces Performance Tuning"},"content":{"rendered":"<div class='toc wptoc'>\n<h2>Contents<\/h2>\n<ol class='toc-odd level-1'>\n\t<li>\n\t\t<a href=\"#ADF_Faces_Tuning\">ADF Faces Tuning<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#General\">General<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#trinidad-config.xml_Configurations\">trinidad-config.xml Configurations<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#web.xml_Configurations\">web.xml Configurations<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Component_Attributes\">Component Attributes<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Table_and_Tree_Component_Configurations\">Table and Tree Component Configurations<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#DVT_Components\">DVT Components<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Others\">Others<\/a>\n\t\t\t<\/li>\n\t\t<\/ol>\n\t<li>\n\t\t<a href=\"#ADF_Server_Tuning\">ADF Server Tuning<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#View_Objects_Tuning\">View Objects Tuning<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Application_Module_AM_Tuning\">Application Module (AM) Tuning<\/a>\n\t\t\t<\/li>\n\t\t<\/ol>\n\t<li>\n\t\t<a href=\"#References\">References<\/a>\n\t<\/li>\n<\/ol>\n<\/ol>\n<\/div>\n<div class='wptoc-end'>&nbsp;<\/div>\n<span id=\"ADF_Faces_Tuning\"><h2>ADF Faces Tuning<\/h2><\/span>\n<span id=\"General\"><h3>General<\/h3><\/span>\n<p>* User partial page navigation<br \/>\n* Use page templates<br \/>\n&#8211; Avoid using &lt;f:subview&gt; whenever possible<br \/>\n&#8211; Avoid long IDs<br \/>\n* Minimize ADF rich client geometry management<br \/>\n&#8211; Minimize number of child components within a parent geometry managed component such as:<\/p>\n<pre>\r\nPanelAccordion\r\nPanelStretchLayout\r\nPanelTabbed\r\nBreadCrumbs\r\nNavigationPane\r\nPanelSplitter\r\nToolbar\r\nToolbox\r\nTable\r\nTrain\r\n<\/pre>\n<p>* Minimize component overflow by setting a big enough initial size<br \/>\n&#8211; The components that have built-in support for overflow are: <\/p>\n<pre>\r\nPanelTabbed\r\nBreadCrumbs\r\nNavigationPane\r\nPanelAccordion\r\nToolbar\r\nTrain\r\n<\/pre>\n<p>* Use PPR (partial page rendering) whenever possible<br \/>\n&#8211; Use panelTabbed (supports PPR) instead of navigationPane (no PPR)<br \/>\n* Cache resources whenever possible<br \/>\n&#8211; Cache all static resources (e.g. setup F5 Big-IP rules)<br \/>\n* Define custom styles at the top of the page<br \/>\n&#8211; Use metaContainer facet<\/p>\n<pre lang=\"xml\">\r\n<af:document title=\"#{attrs.documentTitle}\" theme=\"dark\">\r\n<f:facet name=\"metaContainer\">\r\n<af:group><![CDATA[\r\n<style type=\"text\/css\">\r\n.TabletNavigationGlobal {\r\ntext-align: right;\r\npadding-left: 0px;\r\npadding-right: 10px;\r\nwhite-space: nowrap;\r\n}\r\nHTML[dir=rtl] .TabletNavigationGlobal {\r\ntext-align: left;\r\npadding-left: 10px;\r\npadding-right: 0px;\r\n}\r\n<\/style>\r\n]]>\r\n<af:facetRef facetName=\"metaContainer\"\/>\r\n<\/af:group>\r\n<\/f:facet>\r\n<af:form ...>\r\n<af:facetRef facetName=\"body\"\/>\r\n<\/af:form>\r\n<\/af:document>\r\n<\/pre>\n<p>* Bundle custom JavaScript code and include needed module in client side use:<\/p>\n<pre lang=\"xml\">\r\n<af:resource type=\"javascript\" source=\" \"\/>\r\n<\/pre>\n<span id=\"trinidad-config.xml_Configurations\"><h3>trinidad-config.xml Configurations<\/h3><\/span>\n<p>* Disable debug-ouput element (set to FALSE)<br \/>\n* Disable animation<\/p>\n<span id=\"web.xml_Configurations\"><h3>web.xml Configurations<\/h3><\/span>\n<p>* Minimize <em>state token cache<\/em> size:<br \/>\norg.apache.myfaces.trinidad.CLIENT_STATE_MAX_TOKENS=<br \/>\n(2 to support one back button click) or (1 to disable support for back button)<br \/>\n* Disable test automation:<br \/>\noracle.adf.view.rich.automation.ENABLED=FALSE (default)<br \/>\n* Disable client side assertions in web.xml:<br \/>\noracle.adf.view.rich.ASSERT_ENABLED=FALSE (default)<br \/>\n* Disable JavaScript profiler:<br \/>\noracle.adf.view.rich.profiler.ENABLED=FALSE<br \/>\n* Disable resource debug mode (so that static resources can be cached):<br \/>\norg.apache.myfaces.trinidad.resource.DEBUG=FALSE<br \/>\n* Disable timestamp checking:<br \/>\norg.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION=FALSE (default)<br \/>\n* Disable css file checking:<br \/>\norg.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION=FALSE<br \/>\n* Enable content compression:<br \/>\nDISABLE_CONTENT_COMPRESSION=FALSE<br \/>\n* Enable JavaScript obfuscation(to reduce file size):<br \/>\norg.apache.myfaces.trinidad.DEBUG_JAVASCRIPT=FALSE<br \/>\n* Enable library partitioning:<br \/>\noracle.adf.view.rich.libraryPartitioning.DISABLED=FALSE<br \/>\n* Disable checking JSP file modifications<br \/>\noracle.adf.view.rich.CHECK_FILE_MODIFICATION=FALSE<br \/>\n* oracle.adf.view.rich.CLIENT_STATE_METHOD=token (default)?<br \/>\n* oracle.adf.view.rich.LOGGER_LEVEL=OFF<\/p>\n<pre lang=\"xml\">\r\n<context-param>\r\n  <param-name>oracle.adf.view.rich.LOGGER_LEVEL<\/param-name>\r\n  <param-value>OFF<\/param-value>\r\n<\/context-param>\r\n<\/pre>\n<span id=\"Component_Attributes\"><h3>Component Attributes<\/h3><\/span>\n<p>* Use <em>immediate<\/em> in certain cases<br \/>\n* Prefer <em>rendered <\/em>attribute over <em>visible<\/em> attribute<br \/>\n* Use client-side events whenever possible and prevent event propagation to server side (e.g. cancelling event at the end of processing)<br \/>\n* Use <em>id<\/em> attribute that is less than seven characters<br \/>\n* Use client-side components when necessary by useing <em>clientComponent<\/em> attribute<br \/>\n* Set the childCreation attribute on af:popup to deferred for a server-side performance enhancement.<\/p>\n<span id=\"Table_and_Tree_Component_Configurations\"><h3>Table and Tree Component Configurations<\/h3><\/span>\n<p>* Keep table fetch size and iterator range size in sync<br \/>\n* Disable column stretching (default)<br \/>\n* Minimize use of header rows and frozen columns<\/p>\n<span id=\"DVT_Components\"><h3>DVT Components<\/h3><\/span>\n<p>* Modify the RangeSize attribute<br \/>\n* Minimize vertical text<\/p>\n<span id=\"Others\"><h3>Others<\/h3><\/span>\n<p>* Turn on database table indexing when using autoSuggest<\/p>\n<span id=\"ADF_Server_Tuning\"><h2>ADF Server Tuning<\/h2><\/span>\n<span id=\"View_Objects_Tuning\"><h3>View Objects Tuning<\/h3><\/span>\n<p>* Use least resource intensive view objects (read-only, insert-only, etc)<br \/>\n* Configure view object data fetching behavior properly:<br \/>\n&#8211; Fetch mode<br \/>\n&#8211; Fetch size<br \/>\n&#8211; Max fetch size<br \/>\n&#8211; Forward-only mode<br \/>\n* Consider optimize large data set<br \/>\n* Disable &#8220;spillover&#8221; configuration when possible (i.e. set jbo.use.pers.coll=false)<br \/>\n* Review SQL style configuration (e.g. -Djbo.SQLBuilder=&#8221;SQL92&#8243;)<br \/>\n* Use bind variables for view object queries to maximize reuse.<br \/>\n* Use query optimizer hints<br \/>\n* Use dynamic SQL generation<br \/>\n* Use batch processing when possible (BatchThreshold property)<br \/>\n* Set RangeSize equal to number of records to be displayed in UI (avoid round trips)<\/p>\n<span id=\"Application_Module_AM_Tuning\"><h3>Application Module (AM) Tuning<\/h3><\/span>\n<p>* Use large AM to minimize database connection instances.<br \/>\n* Use lazing loading (-Djbo.load.components.lazily=true)<br \/>\n* Use AM pooling (configure in bc4j.xcfg file)<\/p>\n<span id=\"References\"><h2>References<\/h2><\/span>\n<p>* <a href=\"http:\/\/docs.oracle.com\/cd\/E17904_01\/core.1111\/e10108\/adf.htm\">OFM 11g R1: Oracle Application Development Framework Performance Tuning<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>ADF Faces Tuning General * User partial page navigation * Use page templates &#8211; Avoid using &lt;f:subview&gt; whenever possible &#8211; Avoid long IDs * Minimize ADF rich client geometry management &#8211; Minimize number of child components within a parent geometry &hellip; <a href=\"https:\/\/jianmingli.com\/wp\/?p=3797\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[96],"tags":[],"class_list":["post-3797","post","type-post","status-publish","format-standard","hentry","category-adf"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8cRUO-Zf","_links":{"self":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/3797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3797"}],"version-history":[{"count":3,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/3797\/revisions"}],"predecessor-version":[{"id":3800,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/3797\/revisions\/3800"}],"wp:attachment":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}