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 hidden or 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() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Even better after small tweaks: