+ All Categories
Home > Technology > Shootout! Template engines for the JVM

Shootout! Template engines for the JVM

Date post: 28-Nov-2014
Category:
Upload: jeroen-reijn
View: 12,790 times
Download: 0 times
Share this document with a friend
Description:
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
  • 3. Session agenda General overview Interesting template engines Benchmark project Performance results
  • 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
  • 20. Sections { "repo": [ { "name": "resque" }, { "name": "hub" }, { "name": "rip" }, ] } {{#repo}}
  • {{name}} {{/repo}} Data Template
  • resque
  • hub
  • rip Output
  • 21. Fragments base.mustache: Presentations {{#presentations}} {{> presentation}} {{/presentations}} ! presentation.mustache: {{title}}

    {{startTime}}

    Template
  • 22. Jade
  • 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
  • 41. Thank you! Questions? @jreijn [email protected]

Recommended