The Objective
To evaluate and decide which template engine (FreeMarker or GSP) to use as Form Template of the Grails Form Builder Plugin.
The Result
FreeMarker is the winner. By perform rendering 100 times for the same template, GSP need 119,946ms and FreeMarker need approximately 1/4 of GSP, 32,749ms (Surprise? Yes, I am surprised about the performance of FreeMarker over GSP in dynamic template rendering).
How I Did It
The Benchmark Case
The dynamic template was created based on the following domain class:
package test_freemarker2
class Test1 {
int prop1
String prop2
Date prop3
static constraints = { prop2 blank:false }
}
The FreeMarker's template rendering code:
new Template("freemarkerTemplate",
new StringReader(freemarkerTemplateCode),
freemarkerConfig.configuration)
.process([test1Instance: test1Instance, flash:flash], out)
The GSP's template rendering code:
groovyPagesTemplateEngine.createTemplate(gspTemplateCode, 'gspTemplate').make([test1Instance: test1Instance]).writeTo(out)
As the template code (
freemarkerTemplateCode
and
gspTemplateCode
) was too lengthy, I will not describe it here (You can download the complete source code of the application here to run the benchmark test in your own environment).The Benchmark Application
I run the benchmarking tests with the following steps:
- Start the application using grails run-war.
- After the application was started, open or refresh the URL http://localhost:8080/freemarker-vs-gsp/benchmark/index in your browser. You will see the following screen:
- Click on "FreeMarker" link and wait for test completion and shutdown the application. Do the same for "GSP", start from step 1.
Operating System: Puppy Linux 4.3.1
JDK: 1.6.0_20
Grails: 1.3.6
Processor: Intel Pentium M 1.5GHz
Memory: 1285MB
The Source Code
You can download the complete source code of the application and run it yourself.
Conclusion
Even the winner of this benchmark test is FreeMarker, the benchmark code was written based on my limited knowledge of FreeMarker and GSP. You may have better way to write optimized code than I do, please let's me know if you found a better way.
Edited on 28 Jun 2012: Please see the part 2 of this post.
4 comments:
I was wondering, if you have tried it with pre-compiled GSP code?
Was the performace still the same?
When I moved template creation out of loop, the GSP engine was .
Template creation located inside loop:
FreeMarker 100 times completed in 6589ms.
GSP 100 times completed in 33391ms.
Template creation located outside loop:
FreeMarker 100 times completed in 6386ms.
GSP 100 times completed in 950ms.
Please read my comments on the mailing list:
http://grails.1312388.n4.nabble.com/FreeMarker-vs-GSP-for-Dynamic-Template-Rendering-tp3213939p3214347.html
Thanks for writing.
@Søren Berg, GSP pre-compilation is not an option as the template text is dynamically generated.
@potter_ru, thanks to break the benchmark test to template creation and template rendering. Your test result prove that FreeMarker is faster in template creation and GSP is faster in template rendering. My requirement is more on template creation.
@Lari Hotari, I will see your comments there, thanks.
Post a Comment