During the rendering of a page in the Dashboard I am seeing that all portlets assigned to
the page, regardless of their assigned layout region, have their doView() method called.
This is an unnecessary performance overhead; only portlets which will be rendered should
have their doView() called.
For a simple test I created a HelloWorldJSPPortlet and added 2 log.error() calls which
display output on the console showing the portlet is executing its doView, and displaying
the portlet instance/window-specific value.
In Configure Dashboard I used the "generic" layout and assigned the portlet to
both the left and the center regions. In the portlet VIEW I told the left one its name
was alpha and the center one its name was zeta. All good so far and the console shows
both alpha and zeta doView.
I then enter Configure Dashboard and change the layout to "1column" (center
region only), return to the Dashboard which correctly shows only zeta, BUT the console
shows that both alpha and zeta were asked for their doView which is overkill because alpha
will never be displayed in this layout.
12:44:17,196 ERROR [HelloWorldJSPPortlet] in doView
| 12:44:41,457 ERROR [HelloWorldJSPPortlet] yourname: alpha
| 12:44:41,488 ERROR [HelloWorldJSPPortlet] in doView
| 12:44:41,488 ERROR [HelloWorldJSPPortlet] yourname: zeta
|
This can become a performance problem when a user has slow performing portlets in the
other regions which are not displaying (or dozens of portlets in those regions), yet the
user doesnt realize that to improve performance they need to go into the dashboard, change
the layout back so they can see the obscured region, delete the offending portlet(s), then
change the layout to the one they wanted.
Our preferred solution is that rendering of a dashboard page should only call doView for
the portlets which will be displayed on that page (e.g. only portlets belonging to regions
belonging to the layout being used).
We like the ability to "go back" to a layout used previously and see the portlet
windows still assigned to it, so we are not enthusiastic about the solution which would
delete portlet windows from regions (which dont exist in the new layout) during the layout
change activity in Configure Dashboard.
Last, as a temporary workaround, is there any way a portlet doView() method can determine
both: what region it is mapped to, and whether that region will be rendered/belongs to
the layout being used for the dashboard? If so, I could have all doView() methods simply
return; under that condition.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4178911#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...