[ 
https://issues.apache.org/struts/browse/WW-2998?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Matthew Seaborn updated WW-2998:
--------------------------------

    Description: 
I am currently running Struts 2.0.11 (planning to upgrade soon) with OGNL 
2.6.11 and am having significant trouble with the appalling performance of 
OGNL.  

The following XML using Struts 2 Tags and OGNL takes (using the s2 profiling) 
2328ms to render

<%@ page contentType="text/xml" %><%--
--%><%@ taglib prefix="s" uri="/struts-tags" %><%--
--%><%@ taglib uri="http://java.sun.com/jsp/jstl/core"; prefix="c" %><%--
--%><?xml version="1.0" ?>
<response>
      <entities>
            <s:iterator value="entities" id="entity">
                  <entity <%--
                  --%>id="<s:property value="id"/>" <%--
                  --%>name="<s:property value="name"/>" <%--
                  --%>externalId="<s:property value="externalId"/>" <%--
                  --%>color="<s:property value="renderColor"/>" <%--
                  --%>image="<s:property value="image.path"/>" <%--
                  --%>includeInKey="<s:property value="includeInKey"/>" <%--
                  --%>orderRank="<s:property value="orderRank"/>" <%--
                  --%> />
            </s:iterator>
      </entities>
</response>

The exact same functionality, using JSTL tags and EL, takes 15ms

<%@ page contentType="text/xml" %><%--
--%><%@ taglib prefix="s" uri="/struts-tags" %><%--
--%><%@ taglib uri="http://java.sun.com/jsp/jstl/core"; prefix="c" %><%--
--%><?xml version="1.0" ?>
<response>
      <entities>
            <c:forEach items="${entities}" var="entity">
                  <entity <%--
                  --%>id="<c:out value="${entity.id}"/>" <%--
                  --%>name="<c:out value="${entity.name}"/>" <%--
                  --%>externalId="<c:out value="${entity.externalId}"/>" <%--
                  --%>color="<c:out value="${entity.renderColor}"/>" <%--
                  --%>image="<c:out value="${entity.image.path}"/>" <%--
                  --%>includeInKey="<c:out value="${entity.includeInKey}"/>" 
<%--
                  --%>orderRank="<c:out value="${entity.orderRank}"/>" <%--
                  --%> />
            </c:forEach>
      </entities>
</response>

In this case the S2/OGNL is 150x (!!!!!) slower than the JSTL/EL approach.  Now 
clearly in this case the JSTL/EL approach can be used to get decent 
performance, but when using S2's Freemarker based tags that option isn't 
available.



  was:
I am currently running Struts 2.0.11 (planning to upgrade soon) with OGNL 
2.6.11 and am having significant trouble with the appalling performance of 
OGNL.  

The following XML using Struts 2 Tags and OGNL takes (using the s2 profiling) 
2328ms to render

<%@ page contentType="text/xml" %><%--
--%><%@ taglib prefix="s" uri="/struts-tags" %><%--
--%><%@ taglib uri="http://java.sun.com/jsp/jstl/core"; prefix="c" %><%--
--%><?xml version="1.0" ?>
<response>
      <entities>
            <s:iterator value="entities" id="entity">
                  <entity <%--
                  --%>id="<s:property value="id"/>" <%--
                  --%>name="<s:property value="name"/>" <%--
                  --%>externalId="<s:property value="externalId"/>" <%--
                  --%>color="<s:property value="renderColor"/>" <%--
                  --%>image="<s:property value="image.path"/>" <%--
                  --%>includeInKey="<s:property value="includeInKey"/>" <%--
                  --%>orderRank="<s:property value="orderRank"/>" <%--
                  --%> />
            </s:iterator>
      </entities>
</response>

The exact same functionality, using JSTL tags and EL, takes 15ms

<%@ page contentType="text/xml" %><%--
--%><%@ taglib prefix="s" uri="/struts-tags" %><%--
--%><%@ taglib uri="http://java.sun.com/jsp/jstl/core"; prefix="c" %><%--
--%><?xml version="1.0" ?>
<response>
      <entities>
            <c:forEach items="${entities}" var="entity">
                  <entity <%--
                  --%>id="<c:out value="${entity.id}"/>" <%--
                  --%>name="<c:out value="${entity.name}"/>" <%--
                  --%>externalId="<c:out value="${entity.externalId}"/>" <%--
                  --%>color="<c:out value="${entity.renderColor}"/>" <%--
                  --%>image="<c:out value="${entity.image.path}"/>" <%--
                  --%>includeInKey="<c:out value="${entity.includeInKey}"/>" 
<%--
                  --%>orderRank="<c:out value="${entity.orderRank}"/>" <%--
                  --%> />
            </c:forEach>
      </entities>
</response>

In this case the S2/OGNL is 150x (!!!!!) slower than the JSTL/EL approach.  Now 
clearly in this case I can simply use the JSTL/EL approach to get decent 
performance, but when using S2's Freemarker based tags I don't get that option.

Is this really as fast as OGNL can go, or there some optimisation/option I am 
missing?  



> Serious OGNL Performance Issues
> -------------------------------
>
>                 Key: WW-2998
>                 URL: https://issues.apache.org/struts/browse/WW-2998
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Expression Language
>    Affects Versions: 2.0.11
>         Environment: Windows XP 5.1 (2Gb, dual-core 1.8GHz), Java 1.5.0_08,  
> Tomcat 5.5
>            Reporter: Matthew Seaborn
>
> I am currently running Struts 2.0.11 (planning to upgrade soon) with OGNL 
> 2.6.11 and am having significant trouble with the appalling performance of 
> OGNL.  
> The following XML using Struts 2 Tags and OGNL takes (using the s2 profiling) 
> 2328ms to render
> <%@ page contentType="text/xml" %><%--
> --%><%@ taglib prefix="s" uri="/struts-tags" %><%--
> --%><%@ taglib uri="http://java.sun.com/jsp/jstl/core"; prefix="c" %><%--
> --%><?xml version="1.0" ?>
> <response>
>       <entities>
>             <s:iterator value="entities" id="entity">
>                   <entity <%--
>                   --%>id="<s:property value="id"/>" <%--
>                   --%>name="<s:property value="name"/>" <%--
>                   --%>externalId="<s:property value="externalId"/>" <%--
>                   --%>color="<s:property value="renderColor"/>" <%--
>                   --%>image="<s:property value="image.path"/>" <%--
>                   --%>includeInKey="<s:property value="includeInKey"/>" <%--
>                   --%>orderRank="<s:property value="orderRank"/>" <%--
>                   --%> />
>             </s:iterator>
>       </entities>
> </response>
> The exact same functionality, using JSTL tags and EL, takes 15ms
> <%@ page contentType="text/xml" %><%--
> --%><%@ taglib prefix="s" uri="/struts-tags" %><%--
> --%><%@ taglib uri="http://java.sun.com/jsp/jstl/core"; prefix="c" %><%--
> --%><?xml version="1.0" ?>
> <response>
>       <entities>
>             <c:forEach items="${entities}" var="entity">
>                   <entity <%--
>                   --%>id="<c:out value="${entity.id}"/>" <%--
>                   --%>name="<c:out value="${entity.name}"/>" <%--
>                   --%>externalId="<c:out value="${entity.externalId}"/>" <%--
>                   --%>color="<c:out value="${entity.renderColor}"/>" <%--
>                   --%>image="<c:out value="${entity.image.path}"/>" <%--
>                   --%>includeInKey="<c:out value="${entity.includeInKey}"/>" 
> <%--
>                   --%>orderRank="<c:out value="${entity.orderRank}"/>" <%--
>                   --%> />
>             </c:forEach>
>       </entities>
> </response>
> In this case the S2/OGNL is 150x (!!!!!) slower than the JSTL/EL approach.  
> Now clearly in this case the JSTL/EL approach can be used to get decent 
> performance, but when using S2's Freemarker based tags that option isn't 
> available.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to