jengebr opened a new pull request, #842:
URL: https://github.com/apache/tomcat/pull/842

   Enables optimized, non-standard behavior for the most common JSP tags, when 
configured to do so.  
   
   **Unit tests pending**
   **Off by default.**
   
   When activated, the code generation to call `c:set` and/or `c:remove` is 
drastically reduced (samples follow).  When not activated or when the specific 
case is not supported, code generation falls back to the existing standard 
behavior.  Value comes from:
   1. Reduced Object allocation and eventual GC
   2. Fewer method calls (setters, start and end tag, recycle tag)
   3. Elimination of try/finally
   4. No branching by the caller
   5. Smaller .java and .class files
   
   So far this supports only basic cases, but they are approximately 25% of of 
the tags in my application.
   1. `c:set` with `var` and `value`, optional `scope`, no body
   7. `c:remove` with `var`, optional `scope`, no body
   
   The nonstandard generated code looks like this:
   ```
     private void _jspx_meth_c_005fset_005f125(javax.servlet.jsp.PageContext 
_jspx_page_context)
             throws java.lang.Throwable {
       _jspx_page_context.setAttribute("groupName", new 
org.apache.jasper.el.JspValueExpression("/WEB-INF/views/jsp/features/buybox/offerDisplayGroupLayout.jsp(235,12)
 
'${tabContents.keySet().toArray()[0]}'",_jsp_getExpressionFactory().createValueExpression(_jspx_page_context.getELContext(),"${tabContents.keySet().toArray()[0]}",java.lang.Object.class)).getValue(_jspx_page_context.getELContext()),
 javax.servlet.jsp.PageContext.PAGE_SCOPE);
     }
   ```
   The standard generated code looks like this:
   ```
     private boolean 
_jspx_meth_c_005fset_005f39(javax.servlet.jsp.tagext.JspTag 
_jspx_th_c_005fwhen_005f11, javax.servlet.jsp.PageContext _jspx_page_context)
             throws java.lang.Throwable {
       javax.servlet.jsp.PageContext pageContext = _jspx_page_context;
       javax.servlet.jsp.JspWriter out = _jspx_page_context.getOut();
       //  c:set
       org.apache.taglibs.standard.tag.rt.core.SetTag _jspx_th_c_005fset_005f39 
= new org.apache.taglibs.standard.tag.rt.core.SetTag();
       _jsp_getInstanceManager().newInstance(_jspx_th_c_005fset_005f39);
       try {
         _jspx_th_c_005fset_005f39.setPageContext(_jspx_page_context);
         _jspx_th_c_005fset_005f39.setParent((javax.servlet.jsp.tagext.Tag) 
_jspx_th_c_005fwhen_005f11);
         // 
/WEB-INF/views/jsp/features/buybox/offerDisplayGroupLayout.jsp(230,12) name = 
var type = java.lang.String reqTime = false required = false fragment = false 
deferredValue = false expectedTypeName = null deferredMethod = false 
methodSignature = null
         _jspx_th_c_005fset_005f39.setVar("groupName");
         // 
/WEB-INF/views/jsp/features/buybox/offerDisplayGroupLayout.jsp(230,12) name = 
value type = javax.el.ValueExpression reqTime = true required = false fragment 
= false deferredValue = true expectedTypeName = java.lang.Object deferredMethod 
= false methodSignature = null
         _jspx_th_c_005fset_005f39.setValue(new 
org.apache.jasper.el.JspValueExpression("/WEB-INF/views/jsp/features/buybox/offerDisplayGroupLayout.jsp(230,12)
 
'${tabContents.keySet().toArray()[0]}'",_jsp_getExpressionFactory().createValueExpression(_jspx_page_context.getELContext(),"${tabContents.keySet().toArray()[0]}",java.lang.Object.class)).getValue(_jspx_page_context.getELContext()));
         int _jspx_eval_c_005fset_005f39 = 
_jspx_th_c_005fset_005f39.doStartTag();
         if (_jspx_th_c_005fset_005f39.doEndTag() == 
javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
           return true;
         }
       } finally {
         
org.apache.jasper.runtime.JspRuntimeLibrary.releaseTag(_jspx_th_c_005fset_005f39,
 _jsp_getInstanceManager(), false);
       }
       return false;
     }
   
   ```
   
   
   Caller code is also modified to eliminate the boolean check:
   ```
             if (_jspx_meth_c_005fset_005f39(_jspx_th_c_005fwhen_005f11, 
_jspx_page_context))
               return true;
   ```
   ```
           _jspx_meth_c_005fset_005f125(_jspx_page_context);
   ```
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to