[ 
https://issues.apache.org/jira/browse/VELOCITY-607?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12618350#action_12618350
 ] 

Will Glass-Husain commented on VELOCITY-607:
--------------------------------------------

Hi,

Jarkko-- thanks so much for your great work, I'm looking forward to seeing this 
in production.

I just wanted to throw in a reminder the the macro functionality in v1.6 is a 
tremendous leap forward from 1.5, at least for some of us.   (responding to: 
"If the memory usage isn't significantly lower, I don't see much point in using 
1.6.").  The new feature is that macros defined in a file included with #parse 
are now available to the parent page.  This means that you can make libraries 
of macros for various parts of your app (separate from the global macro 
library).  Secondly, macros can be added programmatically via a call to 
RuntimeInstance.addVelocimacro().

I mention this mainly to ensure we don't scope this new functionality out with 
the performance improvements.


> Runtime macro rendering very slow in Velocity 1.6-dev (679708) compared to 1.5
> ------------------------------------------------------------------------------
>
>                 Key: VELOCITY-607
>                 URL: https://issues.apache.org/jira/browse/VELOCITY-607
>             Project: Velocity
>          Issue Type: Bug
>          Components: Engine
>         Environment: Maven 2, JUnit, JUnitPerf, JRat, custom testbench: 
> http://www.iki.fi/wyla/velocity/testbench
>            Reporter: Jarkko Viinamäki
>            Priority: Critical
>             Fix For: 1.6
>
>         Attachments: velocity-1.5-velocity24-test.PNG, 
> velocity-1.6-head-20080725-velocity24-test.PNG, 
> velocity-1.6-macro-performance-IDEAS.patch
>
>
> The following test template (see VELOCITY-24):
> ## local macro, not global
> #macro(letter $char)
>     This is the letter $char
> #end
> #letter("A")
> #letter("B")
> #letter("C")
> #letter("D")
> #letter("E")
> #letter("F")
> #letter("G")
> #letter("H")
> #letter("I")
> #letter("J")
> #letter("K")
> #letter("L")
> #letter("M")
> #letter("N")
> #letter("O")
> #letter("P")
> #letter("Q")
> #letter("R")
> #letter("S")
> #letter("T")
> #letter("U")
> #letter("V")
> #letter("W")
> #letter("X")
> #letter("Y")
> #letter("Z")
> ---
> Works quickly and correctly with Velocity 1.5 with several concurrent 
> threads. However, 1.6-dev is a LOT slower (even 20x).
> The major performance bottlenecks seem to be:
> RuntimeMacro.render (60% of time)
> VelocimacroFactory.getVelocimacro (20% of time)
> With several threads this test also causes Velocity to throw error(s):
> org.apache.velocity.exception.MacroOverflowException: Exceed maximum 20 macro 
> calls. Call Stack:letter->letter->letter->letter->letter
>       at 
> org.apache.velocity.runtime.VelocimacroFactory.startMacroRendering(VelocimacroFactory.java:179)
>       at 
> org.apache.velocity.runtime.RuntimeInstance.startMacroRendering(RuntimeInstance.java:1693)
>       at 
> org.apache.velocity.runtime.directive.VelocimacroProxy.render(VelocimacroProxy.java:200)
>       at 
> org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:230)
>       at 
> org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:178)
>       at 
> org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:323)
>       at org.apache.velocity.Template.merge(Template.java:324)
>       at org.apache.velocity.Template.merge(Template.java:232)
>       at 
> org.apache.velocity.test.load.Velocity24Test.testRendering(Velocity24Test.java:51)
> This is related to VELOCITY-297 but the fix doesn't seem work with the new 
> modified macro implementation.

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


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to