Created
February 14, 2014 11:30
-
-
Save melix/8999604 to your computer and use it in GitHub Desktop.
Micro-Benchmarks for the MarkupTemplateEngine in Groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Grab(group='org.gperfutils', module='gbench', version='0.4.2-groovy-2.1') | |
@Grab('org.freemarker:freemarker:2.3.9') | |
import groovy.text.markup.MarkupTemplateEngine | |
import freemarker.template.* | |
MarkupTemplateEngine engine = new MarkupTemplateEngine() | |
def mkpTemplate1 = engine.createTemplate ''' | |
html { | |
body('It works!') | |
} | |
''' | |
def mkpTemplate2 = engine.createTemplate ''' | |
html { | |
body(text) | |
} | |
''' | |
def mkpTemplate3 = engine.createTemplate ''' | |
html { | |
body(text.toUpperCase()) | |
} | |
''' | |
def mkpTemplate3_typed = engine.createTemplate ''' | |
html { | |
body(((String)text).toUpperCase()) | |
} | |
''' | |
def mkpTemplate4 = engine.createTemplate ''' | |
html { | |
body { | |
ul { | |
persons.each { | |
li("$text $it") | |
} | |
} | |
} | |
} | |
''' | |
def mkpTemplate4_typed = engine.createTemplate ''' | |
List<String> pList = (List<String>) persons | |
String txt = text | |
html { | |
body { | |
ul { | |
for (String p: pList) { | |
li("$txt $p") | |
} | |
} | |
} | |
} | |
''' | |
def model = [text:'Hello', persons:['Cedric','Guillaume','Jochen','Pascal','Paul']] | |
def cfg = new Configuration() | |
def ftlTemplate1 = new Template("name", new StringReader('''<html><body>It works!</body></html>'''), cfg); | |
def ftlTemplate2 = new Template("name", new StringReader('''<html><body>${text}</body></html>'''), cfg); | |
def ftlTemplate3 = new Template("name", new StringReader('''<html><body>${text?upper_case}</body></html>'''), cfg); | |
def ftlTemplate4 = new Template("name", new StringReader('''<html><body><ul><#list persons as person><li>${text} ${person}</#list></ul></body></html>'''), cfg); | |
def r = benchmark { | |
'MarkupTemplateEngine (simple, no binding)' { mkpTemplate1.make([:]).writeTo(new StringWriter()) } | |
'Freemarker (simple, no binding)' { ftlTemplate1.process([:], new StringWriter()) } | |
'MarkupTemplateEngine (simple binding)' { mkpTemplate2.make(model).writeTo(new StringWriter()) } | |
'Freemarker (simple binding)' { ftlTemplate2.process(model, new StringWriter()) } | |
'MarkupTemplateEngine (simple toUpper)' { mkpTemplate3.make(model).writeTo(new StringWriter()) } | |
'Freemarker (simple toUpper)' { ftlTemplate3.process(model, new StringWriter()) } | |
'MarkupTemplateEngine (typed toUpper)' { mkpTemplate3_typed.make(model).writeTo(new StringWriter()) } | |
'MarkupTemplateEngine loop' { mkpTemplate4.make(model).writeTo(new StringWriter()) } | |
'MarkupTemplateEngine typed for loop' { mkpTemplate4_typed.make(model).writeTo(new StringWriter()) } | |
'FreeMarker loop' { ftlTemplate4.process(model, new StringWriter()) } | |
} | |
r.prettyPrint() |
Even better after small tweaks:
Environment
===========
* Groovy: #ImplementationVersion#
* JVM: Java HotSpot(TM) 64-Bit Server VM (24.0-b48, Oracle Corporation)
* JRE: 1.7.0_40-ea
* Total Memory: 274 MB
* Maximum Memory: 1765.5 MB
* OS: Linux (3.8.0-22-generic, amd64)
Options
=======
* Warm Up: Auto (- 60 sec)
* CPU Time Measurement: On
user system cpu real
MarkupTemplateEngine (simple, no binding) 609 0 609 615
Freemarker (simple, no binding) 400 0 400 410
MarkupTemplateEngine (simple binding) 628 3 631 631
Freemarker (simple binding) 864 0 864 877
MarkupTemplateEngine (simple toUpper) 681 0 681 690
Freemarker (simple toUpper) 972 0 972 986
MarkupTemplateEngine (typed toUpper) 696 3 699 706
MarkupTemplateEngine loop 2927 12 2939 2949
MarkupTemplateEngine typed for loop 2579 0 2579 2615
FreeMarker loop 2862 0 2862 2894
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Based on the latest sources (melix/groovy-core@524b948), here are the results: