These slides were from my JFall 2013 presentation about new template engines for the JVM. During this presentation I gave a short introduction to new and interesting template engines and show how they compare to the more well known: JSP, Velocity and Freemarker.
44
Shootout! Template engines for the JVM Jeroen Reijn | @jreijn | #jfall13
Transcript
1. Shootout! Template engines for the JVM Jeroen Reijn |
@jreijn | #jfall13
2. About me Architect @ Hippo Worked on web based platforms
since 2001 with PHP, XSLT, JSP,Velocity and Freemarker Blogger at
http://blog.jeroenreijn.com
4. Template engine? What is a Template ? What is a Template
Engine ? How many Java Template Engines ? Java-Source.net : 21
Wikipedia: 17
5. Most commonly used JSP Freemarker Velocity
6. Overview
7. Selection criteria Project activity Framework support Active
Community Brings added value IDE support
8. Most interesting Thymeleaf Mustache Jade Scalate
9. Thymeleaf
10. Overview Available at http://www.thymeleaf.org/ Java, DOM
based template engine XML / XHTML / HTML5 Full Spring MVC
integration Natural templating
11. Natural templating From Wikipedia: The template can be a
document as valid as the nal result, the engine syntax doesn't
break the document's structure
12. JSP in browser
13. Thymeleaf in browser
14. Variables & Loops Variables ! Loops
15. Fragments Include fragment ! Dene fragment based on
th:fragment
16. {{ Mustache }}
17. Overview Available at https://mustache.github.com
logic-less because there are no control statements (i.e. if, else,
loops, etc) Tags are specied using {{ }} (looks like a mustache)
Implemented by many languages: Java, Ruby, JavaScript, Python,
Erlang, PHP, Objective- C, .NET, C++, Go, ColdFusion, Scala,
etc.
18. Overview Java implementations: JMustache Mustache.java Not
web specic Spring MVC integration as an 3th party add-on
19. Variables { greeting : Hello, message : World }
{{greeting}} {{message}} Data Template Hello World Output
23. Jade Available at http://jade-lang.com Node.js Template
engine Java Implementation: Jade4j Compact notation
24. Syntax
25. Result
26. Variables & Iterations Variables ! Iterations
27. Fragments
28. Overview Available at http://scalate.fusesource.org/ Scala
based Template Engine (ScalaTE) Templates are compiled as Scala
objects Equivalent to using JSP, JSTL, JSP EL & Tiles /
Sitemesh Integration available for Spring, Play, Lift, ...
29. Template languages SSP (Scala Server Pages) SCAML (based on
Rubys HAML) Mustache Jade
30. Scaml Based on HAML (HTML abstraction markup language)
Integrates Scala code Well formatted markup Similar to Jade
31. Variables & Loops ! ! Fragment support is possible
Inline Scala code
32. Benchmark project
33. Benchmark project Simple Spring MVC application Multiple
view resolvers Page that show a list of presentations Uses page
layouts / fragments Uses i18n where possible
34. Spring MVC
35. public class Presentation { private Long id; private String
title; private String speakerName; private String summary; private
String room; private Date startTime; private Date endTime; }
36. Project available Project will be available as open source
on github. https://github.com/jreijn/spring-comparing-
template-engines
37. Results!
38. Performance 0,00s 3,57s 7,14s 10,71s 14,29s 17,86s 21,43s
25,00s Total time taken for 25.000 requests (less is better)
Thymeleaf - v2.1.0 Jade4j - v0.3.17 Scalate - v1.6.1 Mustache -
v1.8 Freemarker - v2.3.19 Velocity - v1.7 JSP - 2.1
39. Findings Thymeleaf uses more memory and was slower then the
commonly used Scalate was a lot slower due to the layout mechanism.
More than 100 seconds for 25.000 requests. Mustache performs really
well!
40. Tips If you want designers to own your templates consider
Mustache or Thymeleaf If you want developers to own your templates:
If you want to generate HTML / XML and DRY? => Jade otherwise:
JSP, Freemarker, etc