Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Choosing a Templating System


Published on

I gave this talk at OSCON 2001. The information here is somewhat outdated, but the related article has been updated since then:

For the record, this was a really fun talk to give. The title slide had animated flames burning on the screen when people walked in.

Published in: Technology
  • very useful
    Are you sure you want to  Yes  No
    Your message goes here

Choosing a Templating System

  1. 1. Perrin Harkins                                                                                                                   
  2. 2. The Ultimate Templating System <ul><li>$HTML =~ s/$(w+)/${$1}/g; </li></ul>FOR MORE INFO... Contact Harkins Enterprises for licensing information. Excellent per-CPU pricing available.
  3. 3. Why bother? <ul><li>Consistency of appearance </li></ul><ul><li>Reusability </li></ul><ul><li>Better isolation from changes </li></ul><ul><li>Division of labor </li></ul>
  4. 4. Template Taxonomy <ul><li>Execution model </li></ul><ul><li>Language </li></ul><ul><li>Parsing </li></ul><ul><li>Framework or just templates </li></ul>
  5. 5. Execution Model <ul><li>Callback </li></ul><ul><ul><li>Mason, Embperl, Apache::ASP </li></ul></ul>mod_perl Perl space template
  6. 6. Execution Model <ul><li>Pipeline </li></ul><ul><ul><li>HTML::Template, Template Toolkit </li></ul></ul>mod_perl Perl space template
  7. 7. Callback <ul><li>Pro </li></ul><ul><ul><li>Easy to componentize pages </li></ul></ul><ul><ul><li>Quick to get started with </li></ul></ul><ul><li>Con </li></ul><ul><ul><li>Messy for branching </li></ul></ul>
  8. 8. Pipeline <ul><li>Pro </li></ul><ul><ul><li>Handles branching cleanly </li></ul></ul><ul><ul><li>Possible tuning opportunities </li></ul></ul><ul><li>Con </li></ul><ul><ul><li>Slower to get started with </li></ul></ul>
  9. 9. Language <ul><li>Burn baby burn </li></ul><ul><ul><li>in-line Perl </li></ul></ul><ul><ul><li>mini-languages </li></ul></ul>
  10. 10. In-line Perl sample <ul><li><% my $product = Product->load('sku' => 'bar1234'); %> </li></ul><ul><li><% if ($product->isbn) { %> </li></ul><ul><li>It's a book! </li></ul><ul><li><% } else { %> </li></ul><ul><li>It's NOT a book! </li></ul><ul><li><% } %> </li></ul><ul><li><% foreach my $item (@{$product->related}) { %> </li></ul><ul><li>You might also enjoy <% $item->name %>. </li></ul><ul><li><% } %> </li></ul>
  11. 11. Mini-language sample <ul><li>[% USE product(sku=bar1234) %] </li></ul><ul><li>[% IF product.isbn %] </li></ul><ul><li>It's a book! </li></ul><ul><li>[% ELSE %] </li></ul><ul><li>It's NOT a book! </li></ul><ul><li>[% END %] </li></ul><ul><li>[% FOREACH item = product.related %] </li></ul><ul><li>You might also enjoy [% %]. </li></ul><ul><li>[% END %] </li></ul>
  12. 12. Parsing <ul><li>Compiled </li></ul><ul><li>Cached parse tree </li></ul><ul><li>Repeated parse </li></ul>template Perl code compiled bytecode
  13. 13. Frameworks vs. Just Templates <ul><li>URL mapping </li></ul><ul><li>Session tracking </li></ul><ul><li>Output caching </li></ul><ul><li>Form handling </li></ul><ul><li>Debugging </li></ul><ul><li>Other options </li></ul><ul><ul><li>libservlet, Apache::PageKit, OpenInteract, CGI::Application </li></ul></ul>
  14. 14. The Contenders <ul><li>SSI </li></ul><ul><li>HTML::Mason </li></ul><ul><li>HTML::Embperl </li></ul><ul><li>Apache::AxKit </li></ul><ul><li>Apache::ASP </li></ul><ul><li>Text::Template </li></ul><ul><li>Template Toolkit </li></ul><ul><li>HTML::Template </li></ul>
  15. 15. SSI <ul><li>Callback </li></ul><ul><li>Mini-language </li></ul><ul><li>Repeated Parse </li></ul><ul><li>#perl </li></ul><ul><li>Apache::SSI for filtering </li></ul>
  16. 16. HTML::Mason <ul><li>Callback (mostly) </li></ul><ul><li>In-line Perl </li></ul><ul><li>Compiled </li></ul><ul><li>Publishing roots </li></ul><ul><li><%init> </li></ul><ul><li>Caching </li></ul><ul><li>Parameter checking </li></ul><ul><li>Debug files </li></ul>
  17. 17. Text::Template <ul><li>Callback </li></ul><ul><li>In-line Perl </li></ul><ul><li>Compiled </li></ul><ul><li>Safe </li></ul><ul><li>Includes not included </li></ul><ul><li>Cache it yourself </li></ul>
  18. 18. Apache::ASP <ul><li>Callback </li></ul><ul><li>In-line Perl </li></ul><ul><li>Compiled </li></ul><ul><li>Built-in objects </li></ul><ul><li>URL-munging sessions </li></ul><ul><li>XMLSubs, XSLT </li></ul><ul><ul><li><site:header page=&quot;Page Title&quot; /> </li></ul></ul><ul><li>Sticky widgets </li></ul><ul><li>Compressed output </li></ul><ul><li>No RDBMS session storage built in </li></ul>
  19. 19. Apache::AxKit <ul><li>Pipeline (usually) </li></ul><ul><li>Mini-language or in-line Perl </li></ul><ul><li>Compiled </li></ul><ul><li>Stylesheet </li></ul><ul><ul><li>XML::XSLT, XML::Sablotron, XPathScript </li></ul></ul><ul><li>Provider </li></ul><ul><ul><li>XSP, XSP taglibs </li></ul></ul><ul><li>Caching </li></ul><ul><li>Compression </li></ul>
  20. 20. HTML::Embperl <ul><li>Callback </li></ul><ul><li>In-line Perl </li></ul><ul><li>Compiled </li></ul><ul><li>Safe </li></ul><ul><li>%fdat, %udat </li></ul><ul><li>HTML support </li></ul><ul><ul><li>TABLE, INPUT, query strings, etc. </li></ul></ul><ul><li>EmbperlObject </li></ul><ul><li>Control structures </li></ul>
  21. 21. Template Toolkit <ul><li>Pipeline (sorta) </li></ul><ul><li>Mini-language </li></ul><ul><li>Compiled </li></ul><ul><li>Dot notation: </li></ul><ul><li>Macros </li></ul><ul><li>Filters </li></ul><ul><li>Plugins </li></ul><ul><ul><li>XML, DBI </li></ul></ul><ul><ul><li>Dates, prices, multi-column </li></ul></ul><ul><li>ttree, Splash library </li></ul>
  22. 22. HTML::Template <ul><li>Pipeline </li></ul><ul><li>Mini-language </li></ul><ul><li>Cached Parse Tree </li></ul><ul><li>Fast and simple </li></ul><ul><li>Templates can be cached in shared memory or disk </li></ul>
  23. 23. Honorable mentions <ul><li>ePerl </li></ul><ul><li>Apache::XPP </li></ul><ul><li>CGI::FastTemplate </li></ul><ul><li>HTML_Tree </li></ul>
  24. 24. Performance <ul><li>Don’t start with your templating system! </li></ul><ul><li>Benchmarks </li></ul><ul><ul><li>http://www. chamas .com/bench/hello.tar. gz </li></ul></ul><ul><li>CGI concerns </li></ul>
  25. 25. Perl Compiled Callback Just Templates Text::Template Mini-language Cached Parse Tree Pipeline Just Templates HTML::Template Perl and XSL and Mini-Language(s) Compiled or Cached Parse Tree Pipeline Framework AxKit Mini-language Repeated Parse Callback Just Templates SSI Perl Compiled Callback Framework HTML::Embperl Perl Compiled Callback Framework Apache::ASP Mini-language Compiled Pipeline Just Templates Template Toolkit Perl Compiled Callback Framework HTML::Mason Language Parsing Method Pipeline or Callback Framework or Just Templates
  26. 26. Updates <ul><li>Article to be published on mod_perl list. </li></ul><ul><li>Send corrections to: </li></ul><ul><li>[email_address] </li></ul>