Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

classic Classic list List threaded Threaded
14 messages Options
Reply | Threaded
Open this post in threaded view
|

Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Henrique Alves Lima
        Hi, everybody.

        My context is Grails freemarker-tags plugin.
        First a quick explanation about how the plugin works:

        At the startup, the plugin
        - Creates a MultipleTemplateLoader that contains a
StringTemplateLoader;
        - Collects all Grails TagLibs that share the same namespace (for
instance "g" namespace);
        - For each namespace, it creates a "namespace.ftl_suffix" (for our
example, a "g.ftl" template) that contains lines like

[#assign message
="org.codehaus.groovy.grails.plugins.freemarker.DynamicTagLibDirective"?new("g", "message")]
[#assign _message
="org.codehaus.groovy.grails.plugins.freemarker.DynamicTagLibFunction"?new("g", "message")]
       
        (these DynamicTagLibXYZ are adapters that know how to locate and
execute Grails TagLibs)

        - The created templates are added to StringTemplateLoader and are
marked, in Configuration object, to be "auto imported".


        That is all.

        Every time a .ftl is called, a lot of instances of
DynamicTagLibDirective and DynamicTagLibFunction are created and
everything works fine (most of the time ;-)). FreeMarker cache seems to
be in use, as expected:

2011-01-14 06:32:01,604 [http-8080-4] DEBUG freemarker.cache  -
g.ftl[en_US,UTF-8,parsed] using cached since
freemarker.cache.StringTemplateLoader$StringTemplateSource@5c1eb57
didn't change.


        I've added options to turn off auto-import and to turn off function
definitions.
        Related to FreeMarker, is there any other performance improvement that
i could/should consider? Is it possible to avoid some object creation?


        Thanks in advance.

http://code.google.com/p/grails-freemarker-tags-plugin/source/browse/


--
"If there must be trouble, let it be in my day,
 that my child may have peace."

Thomas Paine


------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Dekany
You could avoid all the re-instantiations of the
DynamicTagLibDirective if you just put them into the Configuration as
a shared hash variable "g" (see setSharedVariable), which stores the
DynamicTagLibDirective objects. Thus these objects will be created
only once during the whole application life-cycle (when you set up the
Configuration object). Also then auto-importing is not needed. OTOH
then a "g" in the data-model will shadow the "g" shared variable. (To
work that around, you can also add "g" with an additional name, like
"grails_tags", so you can say <#assign g = grails_tags> in the
template, hence shadowing the clashing "g" in the data-model. More
tricky than an import, but then, this accident will also occur
rarely.)


Friday, January 14, 2011, 9:44:30 AM, Daniel Henrique Alves Lima wrote:

>         Hi, everybody.  
>
>         My context is Grails freemarker-tags plugin.
>         First a quick explanation about how the plugin works:
>
>         At the startup, the plugin
>         - Creates a MultipleTemplateLoader that contains a
> StringTemplateLoader;
>         - Collects all Grails TagLibs that share the same namespace (for
> instance "g" namespace);
>         - For each namespace, it creates a "namespace.ftl_suffix" (for our
> example, a "g.ftl" template) that contains lines like
>
> [#assign message
> ="org.codehaus.groovy.grails.plugins.freemarker.DynamicTagLibDirective"?new("g", "message")]
> [#assign _message
> ="org.codehaus.groovy.grails.plugins.freemarker.DynamicTagLibFunction"?new("g", "message")]
>        
>         (these DynamicTagLibXYZ are adapters that know how to locate and
> execute Grails TagLibs)
>
>         - The created templates are added to StringTemplateLoader and are
> marked, in Configuration object, to be "auto imported".
>
>
>         That is all.
>
>         Every time a .ftl is called, a lot of instances of
> DynamicTagLibDirective and DynamicTagLibFunction are created and
> everything works fine (most of the time ;-)). FreeMarker cache seems to
> be in use, as expected:
>
> 2011-01-14 06:32:01,604 [http-8080-4] DEBUG freemarker.cache  -
> g.ftl[en_US,UTF-8,parsed] using cached since
> freemarker.cache.StringTemplateLoader$StringTemplateSource@5c1eb57
> didn't change.
>
>
>         I've added options to turn off auto-import and to turn off function
> definitions.
>         Related to FreeMarker, is there any other performance improvement that
> i could/should consider? Is it possible to avoid some object creation?
>
>
>         Thanks in advance.
>
> http://code.google.com/p/grails-freemarker-tags-plugin/source/browse/
>
>

--
Best regards,
 Daniel Dekany


------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Henrique Alves Lima
        Hi, Daniel. Thanks for your answers.


On Fri, 2011-01-14 at 11:29 +0100, Daniel Dekany wrote:
> You could avoid all the re-instantiations of the
> DynamicTagLibDirective if you just put them into the Configuration as
> a shared hash variable "g" (see setSharedVariable), which stores the
> DynamicTagLibDirective objects. Thus these objects will be created
> only once during the whole application life-cycle (when you set up the
> Configuration object).

        Will this also work for functions/methods (besides directives)?


> Also then auto-importing is not needed. OTOH
> then a "g" in the data-model will shadow the "g" shared variable. (To
> work that around, you can also add "g" with an additional name, like
> "grails_tags", so you can say <#assign g = grails_tags> in the
> template, hence shadowing the clashing "g" in the data-model. More
> tricky than an import, but then, this accident will also occur
> rarely.)
>
>

        About this, even when i use

[#assign message
="org.codehaus.groovy.grails.plugins.freemarker.DynamicTagLibDirective"?new("g", "message")]

(...)

[#import "g.ftl" as g]

        If the script tries to change the value of "g"

[#assign g={"message": "anything"}]

        Won't i lost its original value?


        Thanks in advance!


------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Dekany
Saturday, January 15, 2011, 1:06:26 AM, Daniel Henrique Alves Lima wrote:

>         Hi, Daniel. Thanks for your answers.
>
>
> On Fri, 2011-01-14 at 11:29 +0100, Daniel Dekany wrote:
>> You could avoid all the re-instantiations of the
>> DynamicTagLibDirective if you just put them into the Configuration as
>> a shared hash variable "g" (see setSharedVariable), which stores the
>> DynamicTagLibDirective objects. Thus these objects will be created
>> only once during the whole application life-cycle (when you set up the
>> Configuration object).
>
>         Will this also work for functions/methods (besides directives)?

TemplateMethodModelEx pretty much corresponds to FTL functions, so
yes, it will. (Isn't that how you create them now?) (Note that you can
also have objects that implement both TemplateMethodModelEx and
TemplateDirectiveModel on the same time.)

(But, of course, if any of these Grails-specific objects are bound to
a HTTP Request or HTTP Session, then you can't just create them on the
application level.)

>> Also then auto-importing is not needed. OTOH
>> then a "g" in the data-model will shadow the "g" shared variable. (To
>> work that around, you can also add "g" with an additional name, like
>> "grails_tags", so you can say <#assign g = grails_tags> in the
>> template, hence shadowing the clashing "g" in the data-model. More
>> tricky than an import, but then, this accident will also occur
>> rarely.)
>>
>>
>
>         About this, even when i use
>
> [#assign message
> ="org.codehaus.groovy.grails.plugins.freemarker.DynamicTagLibDirective"?new("g", "message")]
>
> (...)
>
> [#import "g.ftl" as g]
>
>         If the script tries to change the value of "g"
>
> [#assign g={"message": "anything"}]
>
>         Won't i lost its original value?

You will lose it. However here the thing that overrides "g" and the
affected part of the source code that wants to use "g" are in the same
file, which is much less worrisome than if something that comes from
outside hides "g".

>
>         Thanks in advance!

--
Best regards,
 Daniel Dekany


------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Henrique Alves Lima
        Hi, Daniel.


On Sat, 2011-01-15 at 10:52 +0100, Daniel Dekany wrote:
> Saturday, January 15, 2011, 1:06:26 AM, Daniel Henrique Alves Lima wrote:
>

>
> TemplateMethodModelEx pretty much corresponds to FTL functions, so
> yes, it will. (Isn't that how you create them now?) (Note that you can
> also have objects that implement both TemplateMethodModelEx and
> TemplateDirectiveModel on the same time.)

        I cannot remember why i haven't use the sample implementation for both.
If the same class implement both interface, will FreeMarker execute
TemplateDirectiveModel method for <@x.y> and TemplateMethodModelEx
method for ${x.y}? Maybe i wasn't aware of this before... :-/

>
> (But, of course, if any of these Grails-specific objects are bound to
> a HTTP Request or HTTP Session, then you can't just create them on the
> application level.)

        That's why i will try to provide this (shared variables exposure) as an
option.

>
> You will lose it. However here the thing that overrides "g" and the
> affected part of the source code that wants to use "g" are in the same
> file, which is much less worrisome than if something that comes from
> outside hides "g".

        Ok.

        Thanks.


------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Henrique Alves Lima
        And i need to better investigate this:

http://grails.1312388.n4.nabble.com/FreeMarker-vs-GSP-for-Dynamic-Template-Rendering-tp3213939p3219004.html





------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Dekany
In reply to this post by Daniel Henrique Alves Lima
Saturday, January 15, 2011, 11:40:41 AM, Daniel Henrique Alves Lima wrote:

>         Hi, Daniel.
>
>
> On Sat, 2011-01-15 at 10:52 +0100, Daniel Dekany wrote:
>> Saturday, January 15, 2011, 1:06:26 AM, Daniel Henrique Alves Lima wrote:
>>
>
>>
>> TemplateMethodModelEx pretty much corresponds to FTL functions, so
>> yes, it will. (Isn't that how you create them now?) (Note that you can
>> also have objects that implement both TemplateMethodModelEx and
>> TemplateDirectiveModel on the same time.)
>
>         I cannot remember why i haven't use the sample implementation for both.
> If the same class implement both interface, will FreeMarker execute
> TemplateDirectiveModel method for <@x.y> and TemplateMethodModelEx
> method for ${x.y}? Maybe i wasn't aware of this before... :-/

Yes, except that last had to be x.y() of course.

>> (But, of course, if any of these Grails-specific objects are bound to
>> a HTTP Request or HTTP Session, then you can't just create them on the
>> application level.)
>
>         That's why i will try to provide this (shared variables exposure) as an
> option.

You can also put the "g" hash into the data-model in that case (which
makes sense as constructing that hash in Java is certainly faster than
doing the same in FTL, which BTW also includes an #import). If some
member of "g" should be application scope, and some should be request
scope, then you can fall-back to an application scope hash for the
application scope ones.

>> You will lose it. However here the thing that overrides "g" and the
>> affected part of the source code that wants to use "g" are in the same
>> file, which is much less worrisome than if something that comes from
>> outside hides "g".
>
>         Ok.
>
>         Thanks.
>
>
> ------------------------------------------------------------------------------
> Protect Your Site and Customers from Malware Attacks
> Learn about various malware tactics and how to avoid them. Understand
> malware threats, the impact they can have on your business, and how you
> can protect your company and customers by using code signing.
> http://p.sf.net/sfu/oracle-sfdevnl
> _______________________________________________
> FreeMarker-user mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/freemarker-user
>

--
Best regards,
 Daniel Dekany


------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Dekany
In reply to this post by Daniel Henrique Alves Lima
Saturday, January 15, 2011, 1:26:19 PM, Daniel Henrique Alves Lima wrote:

>         And i need to better investigate this:
>
> http://grails.1312388.n4.nabble.com/FreeMarker-vs-GSP-for-Dynamic-Template-Rendering-tp3213939p3219004.html

What exactly is the question regarding this?

I don't know how GSP works, but if it's compiled to Groovy, then
FreeMarker most certainly will be slower that that. But if the tags
called do anything non-trivial, plus the template does I/O (sending
the response), I don't think it should be much a slowdown.

--
Best regards,
 Daniel Dekany


------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Henrique Alves Lima
        Hi, Daniel.

        I'm not sure (yet). I believe FreeMarker performance should be close to
GSP performance in this case. FreeMarker is performing worse by a large
factor. I'm trying to discover if Tags plugin has something to do with
it.

        Thanks.

On Sun, 2011-01-16 at 00:02 +0100, Daniel Dekany wrote:

> Saturday, January 15, 2011, 1:26:19 PM, Daniel Henrique Alves Lima wrote:
>
> >         And i need to better investigate this:
> >
> > http://grails.1312388.n4.nabble.com/FreeMarker-vs-GSP-for-Dynamic-Template-Rendering-tp3213939p3219004.html
>
> What exactly is the question regarding this?
>
> I don't know how GSP works, but if it's compiled to Groovy, then
> FreeMarker most certainly will be slower that that. But if the tags
> called do anything non-trivial, plus the template does I/O (sending
> the response), I don't think it should be much a slowdown.



------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Henrique Alves Lima
        Daniel, the tests are running the following template 10.000 times:

[#ftl/]
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" />
    [#assign  entityName][@g.message code="test1.label"
default="Test1" /][/#assign]
    [#assign  entityName][@g.message code="test1.label"
default="Test1" /][/#assign]
    [#assign  entityName][@g.message code="test1.label"
default="Test1" /][/#assign]
    <!-- ${entityName} -->
  </head>
</html>

        It takes 20-30 seconds. GSP is doing something equivalent in 4-6
seconds, but this doesn't make any sense: Save a minor overhead, they
are both calling the same compiled code to get the job done.


        Something is very odd, but to me FreeMarker doesn't seem the root of
the problem (i really need a better profiler :-/):

http://grails.1312388.n4.nabble.com/FreeMarker-vs-GSP-for-Dynamic-Template-Rendering-tp3213939p3219595.html


        Thanks!


On Sat, 2011-01-15 at 21:22 -0200, Daniel Henrique Alves Lima wrote:
> Hi, Daniel.
>
> I'm not sure (yet). I believe FreeMarker performance should be close to
> GSP performance in this case. FreeMarker is performing worse by a large
> factor. I'm trying to discover if Tags plugin has something to do with
> it.
>
> Thanks.
>



------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Dekany
Sunday, January 16, 2011, 1:09:20 AM, Daniel Henrique Alves Lima wrote:

>         Daniel, the tests are running the following template 10.000 times:
>
> [#ftl/]
> <html>
>   <head>
>     <meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" />>

>     [#assign  entityName][@g.message code="test1.label"
> default="Test1" /][/#assign]
>     [#assign  entityName][@g.message code="test1.label"
> default="Test1" /][/#assign]
>     [#assign  entityName][@g.message code="test1.label"
> default="Test1" /][/#assign]
>     <!-- ${entityName} -->
>   </head>
> </html>
>
>         It takes 20-30 seconds. GSP is doing something equivalent in 4-6
> seconds, but this doesn't make any sense: Save a minor overhead, they
> are both calling the same compiled code to get the job done.

Well, it looks like a micro-benchmark, so everything is possible. I
mean, what does g.message do? If almost nothing, like only a
HashMap.get, then it's easily possible to get a 5x slowdown figure.
Like, you are *capturing* output here, which involves collecting into
a StringBuffer, which is much much slower than assigning the result of
an expression to variable (like [#assign entityName =
g.message(...)]). Plus you might have a startup overhead (especially
if you have auto-#import) that can be comparable to the actual
execution time of the template. So on, so on... Actually, if you are
going to assemble Web pages from hundreds of little independent
templates (i.e., you call cfg.getTemplate(...).process(...) for each
of them), I don't think FreeMarker fits the task.

>         Something is very odd, but to me FreeMarker doesn't seem the root of
> the problem (i really need a better profiler :-/):
>
> http://grails.1312388.n4.nabble.com/FreeMarker-vs-GSP-for-Dynamic-Template-Rendering-tp3213939p3219595.html
>
>
>         Thanks!
>
>
> On Sat, 2011-01-15 at 21:22 -0200, Daniel Henrique Alves Lima wrote:
>>       Hi, Daniel.
>>
>>       I'm not sure (yet). I believe FreeMarker performance should be close to
>> GSP performance in this case. FreeMarker is performing worse by a large
>> factor. I'm trying to discover if Tags plugin has something to do with
>> it.
>>
>>       Thanks.
>>
>
>
>

--
Best regards,
 Daniel Dekany


------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Henrique Alves Lima
        Hi, Daniel.

        Yes, it is a micro-benchmark, but .ftl rendering seems also slower for
the original (whole) template. I've cut down the template until only
those @g.message lines remains. If i'm not wrong, g.message searches
message at Resource Bundle files.
        I've already develop a option to turn off auto-import so i don't
believe this is causing the issue. I can test other tags usage or the
original template again.


        Thanks.

        Best regards,

                Daniel.


On Sun, 2011-01-16 at 12:51 +0100, Daniel Dekany wrote:

>
> Well, it looks like a micro-benchmark, so everything is possible. I
> mean, what does g.message do? If almost nothing, like only a
> HashMap.get, then it's easily possible to get a 5x slowdown figure.
> Like, you are *capturing* output here, which involves collecting into
> a StringBuffer, which is much much slower than assigning the result of
> an expression to variable (like [#assign entityName =
> g.message(...)]). Plus you might have a startup overhead (especially
> if you have auto-#import) that can be comparable to the actual
> execution time of the template. So on, so on... Actually, if you are
> going to assemble Web pages from hundreds of little independent
> templates (i.e., you call cfg.getTemplate(...).process(...) for each
> of them), I don't think FreeMarker fits the task.



------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Henrique Alves Lima
http://grails.1312388.n4.nabble.com/GSP-and-GroovyPageOutputStack-push-tp3219693p3219976.html

        I'm not expecting that FreeMarker beats GSP. I'm just trying to
eliminate potencial performance bottlenecks.

        Best regards,

        Daniel.


On Sun, 2011-01-16 at 10:08 -0200, Daniel Henrique Alves Lima wrote:

> Hi, Daniel.
>
> Yes, it is a micro-benchmark, but .ftl rendering seems also slower for
> the original (whole) template. I've cut down the template until only
> those @g.message lines remains. If i'm not wrong, g.message searches
> message at Resource Bundle files.
> I've already develop a option to turn off auto-import so i don't
> believe this is causing the issue. I can test other tags usage or the
> original template again.
>
>
> Thanks.
>
> Best regards,
>
> Daniel.
>
>



------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
Reply | Threaded
Open this post in threaded view
|

Re: Possible room for performance improvement when using TemplateDirectiveModel and TemplateMethodModelEx

Daniel Henrique Alves Lima
        Solved:

http://grails.1312388.n4.nabble.com/FreeMarker-vs-GSP-for-Dynamic-Template-Rendering-tp3213939p3220575.html


        Thanks, Daniel.




------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
FreeMarker-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/freemarker-user