You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2013/09/16 23:16:44 UTC

svn commit: r1523813 - in /myfaces/core/trunk: impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHeadRenderer.java shared/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java

Author: gpetracek
Date: Mon Sep 16 21:16:44 2013
New Revision: 1523813

URL: http://svn.apache.org/r1523813
Log:
MYFACES-3775 optional early flush

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHeadRenderer.java
    myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHeadRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHeadRenderer.java?rev=1523813&r1=1523812&r2=1523813&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHeadRenderer.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHeadRenderer.java Mon Sep 16 21:16:44 2013
@@ -21,6 +21,7 @@ package org.apache.myfaces.renderkit.htm
 import java.io.IOException;
 import java.util.List;
 
+import javax.faces.application.ProjectStage;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
@@ -28,6 +29,7 @@ import javax.faces.context.ResponseWrite
 import javax.faces.render.Renderer;
 
 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFRenderer;
+import org.apache.myfaces.shared.config.MyfacesConfig;
 import org.apache.myfaces.shared.renderkit.html.HTML;
 import org.apache.myfaces.shared.renderkit.html.HtmlRendererUtils;
 
@@ -81,5 +83,11 @@ public class HtmlHeadRenderer extends Re
             child.encodeAll(facesContext);
         }
         writer.endElement(HEAD_ELEM);
+
+        if (MyfacesConfig.getCurrentInstance(facesContext.getExternalContext()).isEarlyFlushEnabled() &&
+                facesContext.isProjectStage(ProjectStage.Production))
+        {
+            writer.flush();
+        }
     }
 }

Modified: myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java?rev=1523813&r1=1523812&r2=1523813&view=diff
==============================================================================
--- myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java (original)
+++ myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java Mon Sep 16 21:16:44 2013
@@ -418,6 +418,15 @@ public class MyfacesConfig
             "org.apache.myfaces.GAE_JSF_ANNOTATIONS_JAR_FILES";
     public final static String INIT_PARAM_GAE_JSF_ANNOTATIONS_JAR_FILES_DEFAULT = null;
 
+    @JSFWebConfigParam(defaultValue = "false", since = "2.2.0", expectedValues="true, false", group="render",
+            tags="performance",
+            desc="Enable or disable an early flush which allows to send e.g. the HTML-Head to the client " +
+                    "while the rest gets rendered. It's a well known technique to reduce the time for loading a page.")
+    private static final String INIT_PARAM_EARLY_FLUSH_ENABLED =
+        "org.apache.myfaces.EARLY_FLUSH_ENABLED";
+    private static final boolean INIT_PARAM_EARLY_FLUSH_ENABLED_DEFAULT = false;
+
+
     private boolean _prettyHtml;
     private boolean _detectJavascript;
     private boolean _allowJavascript;
@@ -449,6 +458,7 @@ public class MyfacesConfig
     private boolean _supportJSPAndFacesEL;
     private String _gaeJsfJarFiles;
     private String _gaeJsfAnnotationsJarFiles;
+    private boolean _earlyFlushEnabled;
 
     private static final boolean TOMAHAWK_AVAILABLE;
     private static final boolean MYFACES_IMPL_AVAILABLE;
@@ -549,6 +559,7 @@ public class MyfacesConfig
         setSupportJSPAndFacesEL(INIT_PARAM_SUPPORT_JSP_AND_FACES_EL_DEFAULT);
         setGaeJsfJarFiles(INIT_PARAM_GAE_JSF_JAR_FILES_DEFAULT);
         setGaeJsfAnnotationsJarFiles(INIT_PARAM_GAE_JSF_ANNOTATIONS_JAR_FILES_DEFAULT);
+        setEarlyFlushEnabled(INIT_PARAM_EARLY_FLUSH_ENABLED_DEFAULT);
     }
 
     private static MyfacesConfig createAndInitializeMyFacesConfig(ExternalContext extCtx)
@@ -655,7 +666,10 @@ public class MyfacesConfig
                 INIT_PARAM_GAE_JSF_JAR_FILES, INIT_PARAM_GAE_JSF_JAR_FILES_DEFAULT));
         myfacesConfig.setGaeJsfAnnotationsJarFiles(WebConfigParamUtils.getStringInitParameter(extCtx, 
                 INIT_PARAM_GAE_JSF_ANNOTATIONS_JAR_FILES, INIT_PARAM_GAE_JSF_ANNOTATIONS_JAR_FILES_DEFAULT));
-        
+
+        myfacesConfig.setEarlyFlushEnabled(WebConfigParamUtils.getBooleanInitParameter(extCtx,
+                INIT_PARAM_EARLY_FLUSH_ENABLED, INIT_PARAM_EARLY_FLUSH_ENABLED_DEFAULT));
+
         if (TOMAHAWK_AVAILABLE)
         {
             myfacesConfig.setDetectJavascript(getBooleanInitParameter(extCtx, INIT_PARAM_DETECT_JAVASCRIPT,
@@ -1174,4 +1188,13 @@ public class MyfacesConfig
         this._gaeJsfAnnotationsJarFiles = gaeJsfAnnotationsJarFiles;
     }
 
+    public boolean isEarlyFlushEnabled()
+    {
+        return _earlyFlushEnabled;
+    }
+
+    public void setEarlyFlushEnabled(boolean earlyFlushEnabled)
+    {
+        this._earlyFlushEnabled = earlyFlushEnabled;
+    }
 }