Shootout! Template engines for the JVM

33,308 views
32,651 views

Published on

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.

Published in: Technology, Business
9 Comments
63 Likes
Statistics
Notes
  • I ran for 10000 times loop. Rythm was failing to load template, so i need to exclude that in my test...

    stringbuilder:
    [java] ntimes: 10000, real time: 641(msec)

    freemarker:
    [java] ntimes: 10000, real time: 1602(msec)

    velocity:
    [java] ntimes: 10000, real time: 1035(msec)

    jamon:
    [java] ntimes: 10000, real time: 633(msec)

    httl:
    [java] ntimes: 10000, real time: 479(msec)

    jmte:
    [java] ntimes: 10000, real time: 2193(msec)

    httl was outperforming in all tests with 100 time loop, 1000 time loop and finally 10000 loop (also mentioned above).

    http://www.techiesinfo.com/performance
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • @JerzyZagrski I agree and therefor I changed it. While giving the presentation I told the audience this and I did not really write my slides as a handout. I also updated the chart because Scalate was indeed much slower (more then 5 times actually) when using the layouts. With includes it's actually quite fast. Because includes were more in-line with the rest of the examples I changed it and changed the graphs now shows different results. I thought this would be useful, since these slides seems to get quite some attention.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • The graph on page 41 is misleading. It gives the impression that Scalate is ~10x slower than JSP, when actually it's only 2x. Presenting any data this way should be banned.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • I don't think this is the right place to discuss issues. You can try to post your question on stack overflow.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • but I am facing problem while using mustache with my spring mvc+maven project.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
33,308
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
210
Comments
9
Likes
63
Embeds 0
No embeds

No notes for slide

Shootout! Template engines for the JVM

  1. 1. Shootout! Template engines for the JVM Jeroen Reijn | @jreijn | #jfall13
  2. 2. About me • Engineer @ Hippo (CMS) • Worked on web based platforms since 2001 with PHP, XSLT, JSP,Velocity and Freemarker • Blogger at http://blog.jeroenreijn.com
  3. 3. Session agenda • General overview • Interesting template engines • Benchmark project • Performance results
  4. 4. Template engine? • What is a Template ? • What is a Template Engine ? • How many Java Template Engines ? • Java-Source.net : 21 • Wikipedia: 17
  5. 5. Most commonly used • JSP • Freemarker • Velocity
  6. 6. Overview
  7. 7. Selection criteria • Project activity • Framework support • Active Community • Brings added value • IDE support
  8. 8. Most interesting • Thymeleaf • Mustache • Jade • Scalate
  9. 9. Thymeleaf
  10. 10. Overview • Available at http://www.thymeleaf.org/ • Java, DOM based template engine • XML / XHTML / HTML5 • Full Spring MVC integration • ‘Natural templating’
  11. 11. Natural templating • From Wikipedia: “The template can be a document as valid as the final result, the engine syntax doesn't break the document's structure”
  12. 12. JSP in browser
  13. 13. Thymeleaf in browser
  14. 14. Variables & Loops • Variables • Loops
  15. 15. Fragments • Include fragment • Define fragment based on th:fragment
  16. 16. {{ Mustache }}
  17. 17. Overview • Available at https://mustache.github.com • “logic-less” because there are no control statements (i.e. if, else, loops, etc) • Tags are specified using {{ }} (looks like a mustache) • Implemented by many languages: Java, Ruby, JavaScript, Python, Erlang, PHP, Objective- C, .NET, C++, Go, ColdFusion, Scala, etc.
  18. 18. Overview • Java implementations: • JMustache • Mustache.java • Not web specific • Spring MVC integration as an 3th party add-on
  19. 19. Variables { “greeting” : “Hello”, “message” : “World” } {{greeting}} {{message}} Data Template Hello World Output
  20. 20. Sections { "repo": [ { "name": "resque" }, { "name": "hub" }, { "name": "rip" }, ] } {{#repo}} <li>{{name}}</li> {{/repo}} Data Template <li>resque</li> <li>hub</li> <li>rip</li> Output
  21. 21. Fragments base.mustache: <h2>Presentations</h2> {{#presentations}} {{> presentation}} {{/presentations}} presentation.mustache: <h3>{{title}}</h3> <p>{{startTime}}</p> Template
  22. 22. Jade
  23. 23. Jade • Available at http://jade-lang.com • Node.js Template engine • Java Implementation: Jade4j • Compact notation
  24. 24. Syntax
  25. 25. Result
  26. 26. Variables & Iterations • Variables • Iterations
  27. 27. Fragments
  28. 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. 29. Template languages • SSP (Scala Server Pages) • SCAML (based on Ruby’s HAML) • Mustache • Jade
  30. 30. Scaml • Based on HAML (HTML abstraction markup language) • Integrates Scala code • Well formatted markup • Similar to Jade
  31. 31. Variables & Loops • Fragment support is possible • Inline Scala code
  32. 32. Benchmark project
  33. 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. 34. Spring MVC
  35. 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. 36. Project available • Project will be available as open source on github. • https://github.com/jreijn/spring-comparing- template-engines
  37. 37. Results!
  38. 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 * All tests were local, on hardware from 2010. Results might differ based on the actual implementation. For the latest results check the GitHub project from slide 39.
  39. 39. Findings • Thymeleaf used more memory and was slower then the commonly used, but seems great for the web. • When using ‘layouts’ instead of includes, Scalate was a factor 4 slower. • Mustache performed really well!
  40. 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
  41. 41. Thank you! Questions? @jreijn j.reijn@onehippo.com

×