2 Replies Latest reply on Aug 26, 2011 11:28 AM by ben.maisano

    View rebuild on each request

    ben.maisano

      Hi, I'm having a performance problem with my ajax requests and from what I can tell its because the entire component tree is being rebuild on each ajax request.  This is happening even if I use ajaxSingle = true, wrap sections in a4j:region, declare a single section for rerendering or none at all.  Our page is a dynamic page with many nested levels using c:forEach tags and c:if tags, as well as custom functions being called within the EL context.  The page may contain around 800-900 fields (inputText, rich calendars, selectOneMenus, etc).  The initial load time is an issue, but I understand that issue, its a lot of fields.  Once we have that initial build/render time though we have designed all other actions to be ajax and only reRender what is needed.  From facelets debug logs I see messages like this on any ajax call:

       

      2011-08-24 22:19:03,054 DEBUG [facelets.viewhandler] (http-0.0.0.0-8080-2) Took

      24445ms to build view: /oconsole/appfile.xhtml

      2011-08-24 22:19:09,377 DEBUG [facelets.viewhandler] (http-0.0.0.0-8080-2) Took

      6323ms to render view: /oconsole/appfile.xhtml

       

      I'm not sure if something we are doing is causing the rebuild of everything, or this is some bug given our combination of libararies/etc.  Here is our stack:

      JBoss 5.1

      JSF 1.2

      RichFaces. 3.3.3.Final

      Facelets 1.1.15

      Seam 2.1.2

       

      I have tried adding some context parameters to see if they would help, but they did nothing:

      facelets.BUILD_BEFORE_RESTORE = false

      facelets.REFRESH_PERIOD = -1

       

      Any way to tell if our views are being cached properly?  We do not delcare a state saving method, so I believe it defaults to server side.  All our requests happen within seam long running conversations.  I wasn'te sure if this plays a factor as I thought views get cached at session level?  Any help would be greatly appreciated, thank you.

        • 1. Re: View rebuild on each request
          ben.maisano

          Update:

           

          After some more debugging I have some more information....

           

          The AjaxViewHandler (which has a member variable of the FaceletsViewHandler) has developmentMode=true set.  I'm not sure if this is causing facelets to not cache any views so any changes would be refreshed during development cycles...??  Its been very difficult to find any information on facelets/JSF caching of views and the behavior and controlling that.  Furthermore, when I add config param:

           

            <context-param>


          <param-name>facelets.DEVELOPMENT</param-name>


          <param-value>false</param-value>

          </context-param>

           

          This did not take!  In debugger I still see true set.  Since we have a lot of subviews I also tried

          com.sun.faces.numberOfLogicalViews and

          com.sun.faces.numberOfViewsInSession

          to 1000 up from 15(default) and this had no effect.

           

          I also tried changing to client side state saving without any luck.  Running out of ideas....hope someone can help....

           

          It seems Seam 2.1 auto-initializes RichFaces and I'm not sure if that has something to do with it.....

          • 2. Re: View rebuild on each request
            ben.maisano

            Can someone at least expalin to me if facelets/AjaxViewHandler is suppose to rebuild the entire component tree on every ajax request or not?  Any insight into how views are cached/etc would be helpful, thanks.