ADF Region性能調優之 Activation 屬性

最近有個客戶抱怨他們用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何時被激活從而加快頁面的加載速度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章