[ 
https://issues.apache.org/jira/browse/MYFACES-3789?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16886111#comment-16886111
 ] 

Thomas Andraschko edited comment on MYFACES-3789 at 7/16/19 1:31 PM:
---------------------------------------------------------------------

JFYI:
this is a big performance drop for the development stage.
-1 is the default for production, 0 for development stage now.
This means that the xhtml is compiled on EVERY REQUEST instead of checking the 
last modified.
Setting it to "1" means that it's recompiled after 1 second && xhtml has been 
modified.

compared response times:
production mode (-1): ~40ms
dev mode (0): ~400ms
dev mode (1): ~200ms

a good solution is to set -1 in the web.xml and add a ServletListener:

{code:java}
    @Override
    public void contextInitialized(ServletContextEvent sce)
    {
        ServletContext ctx = sce.getServletContext();

        String projectStage = ctx.getInitParameter("javax.faces.PROJECT_STAGE");
        boolean developmentProjectStage = projectStage == null || 
projectStage.equalsIgnoreCase(ProjectStage.Development.name());

        if (developmentProjectStage)
        {
            // 2 means that JSF checks the last-modified of xhtmls every 2 
seconds
            // the default (0) never checks for last-modified and always parses 
the xhtml, which leads to bad performance
            ctx.setInitParameter("javax.faces.FACELETS_REFRESH_PERIOD", "1");
        }
    }
{code}



was (Author: tandraschko):
JFYI:
this is a big performance drop for the development stage.
-1 is the default for production, 0 for development stage now.
This means that the xhtml is compiled on EVERY REQUEST instead of checking the 
last modified.
Setting it to "1" means that it's recompiled after 1 second && xhtml has been 
modified.

compared response times:
production mode (-1): ~40ms
dev mode (0): ~400ms
dev mode (1): ~200ms

a goodl solution is to set -1 in the web.xml and add a ServletListener:

{code:java}
    @Override
    public void contextInitialized(ServletContextEvent sce)
    {
        ServletContext ctx = sce.getServletContext();

        String projectStage = ctx.getInitParameter("javax.faces.PROJECT_STAGE");
        boolean developmentProjectStage = projectStage == null || 
projectStage.equalsIgnoreCase(ProjectStage.Development.name());

        if (developmentProjectStage)
        {
            // 2 means that JSF checks the last-modified of xhtmls every 2 
seconds
            // the default (0) never checks for last-modified and always parses 
the xhtml, which leads to bad performance
            ctx.setInitParameter("javax.faces.FACELETS_REFRESH_PERIOD", "1");
        }
    }
{code}


> Change default refresh period for facelets from 2 to 0 sec (=always refresh)
> ----------------------------------------------------------------------------
>
>                 Key: MYFACES-3789
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3789
>             Project: MyFaces Core
>          Issue Type: Wish
>            Reporter: Martin Kočí
>            Assignee: Leonardo Uribe
>            Priority: Trivial
>             Fix For: 2.2.5
>
>         Attachments: MYFACES-3789.patch
>
>
> A typical developer works as follows
> 1) edits a facelets view  (template, composite component)
> 2) CTRL +S
> 3) refresh in browser (or LiveReload)
> but: from 2) to  3) takes it sometimes less as 2 secs and the programmer must 
> repeat the 3)
> We can override this behaviour with context-param:
> javax.faces.FACELETS_REFRESH_PERIOD=0
> but then is for development neccesary:
> javax.faces.PROJECT_STAGE=Development
> javax.faces.FACELETS_REFRESH_PERIOD=0
> and for Production:
> javax.faces.PROJECT_STAGE=Production
> javax.faces.FACELETS_REFRESH_PERIOD=-1
> that means a configuration of 2 params instead of one (ProjectStage) (the 
> problem is:  javax.faces.FACELETS_REFRESH_PERIOD when not default always wins 
>  and PROJECT_STAGE=Production doesn't set FACELETS_REFRESH_PERIOD to -1)
> with default refresh period = 0 makes the method 
> FaceletCacheFactoryImpl.getFaceletCache() the job and only 
> javax.faces.PROJECT_STAGE=Production is necessary.
> Does anybody know why is the default 2 seconds ?



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Reply via email to