ADF Region性能调优之 Activation 属性

来源:互联网 发布:暴雪台服战网客户端mac 编辑:程序博客网 时间:2024/04/29 19:25

最近有个客户抱怨他们用ADF开发的系统,有的页面加载迟缓。经过分析发现,该页面有加载多达将近20个Region,这些Region在页面上的Tab页面,Popup中分别展现。ADF中的Region是页面上的一个区域,这个区域用于引用外部的页面片段或者Taskflow。Region是ADF框架中提高页面重用性的一个主要手段。在默认的配置下,Region在页面加载时会被激活,即使在Tab或者Popup组件没有在页面上显示时Region也会被激活并执行引用的Taskflow,因此如果一个页面上包含的Region过多,在默认情况下该页面的性能会相应的降低。对此,ADF提供了Activation属性来控制何时激活Region。


Activation属性的值有以下选择:

Immediate : 在页面加载时立即激活Region,该值为默认值。

deferred: 在使用Facelets作为页面实现时(非jspx),该值实现懒加载,但如果是jspx页面则该值等同于immediate。

conditional:通过输入一个表达式来确定是否激活Region。


在一个多Region的页面中,通常我们需要来控制何时激活这些region。因此我们会选择Activation的值为conditional并且设置active属性的表达式,具体过程如下所示:


1. 首先我们创建一个多region的页面,该页面包含了多个tab,每个tab会加载一个region,页面如下:



该页面的PageDef如下:



2. 为了实验目的,每个taskflow的默认节点为一个Method Call,该方法会调用一个POJO的DataControl的一个方法,该方法会在标准输出打印taskflow被激活的文字。

taskflow如下所示:



POJO方法如下:



3. 首先我们将所有region 绑定的taskflow的activation属性设置为默认immediate或者deferred,如下图所示:




运行该页面后, 可以在控制台看到所有taskflow在加载时都被运行了。





4. 在tab组件上添加setPropertyListener,使每次tab被disclose时都将设置一个EL表达式的值,该EL表达式会用于每个region判断是否要激活taskflow。

setPropertyListener 如下:



5. 在region的绑定中设置activation为conditional,并设置active的EL表达式,如下图所示:





6. 重新启动应用,加载该页面,可以看到仅第一个tab加载的region被激活,其他的region都未被激活。



总结:通过设置activation属性,我们可以控制ADF region何时被激活从而加快页面的加载速度。

原创粉丝点击