In my last post, I mentioned my ideal of keeping “HTML” generation as operations on a DOM tree, instead of assigning variables to templates and using string substitution. Parse the initial template file, fill it with data, then render it once with safe encoding (where relevant) at the end.
I also know why this approach isn’t as popular: everyone hates the DOM.
Showing posts with label templates. Show all posts
Showing posts with label templates. Show all posts
Saturday, September 5, 2015
Sunday, August 11, 2013
Pre-compiling Twig Templates
To be able to use option
The next obvious question is, "How do I make twig compile templates without rendering them?" and it turns out there's a simple answer. The long form
Conceptually, then, it's dead simple: configure Twig how you normally would, list out all your template files, and call
'auto_reload'=>false in production with Twig, I need to be able to force a recompilation. The easy way would be to clear the cache directory in the deployer when pushing an update, but if I'm micro-optimizing, why not ship built templates as part of the distribution?The next obvious question is, "How do I make twig compile templates without rendering them?" and it turns out there's a simple answer. The long form
$twig->loadTemplate("name.twig")->render($vars) is the secret: loadTemplate writes to the cache if caching is enabled when the template is loaded.Conceptually, then, it's dead simple: configure Twig how you normally would, list out all your template files, and call
$twig->loadTemplate() on each of them. I believe the minimal solution on POSIX platforms would look like this:Wednesday, August 7, 2013
Smarty vs. Twig (a benchmark done poorly)
Note added 14 Feb 2014: I ended up settling on Twig without too much more rigorous testing. This used to be titled "Part 1" but there is, and is never expected to be, a Part 2. Now back to your original post....
I'm pretty cranky about what my templates do (I have been known to roll my own), so I have a small list of must-have features. Listing in order by increasing likelihood that a template engine satisfies them:
With that, it looks like the contenders are Smarty and Twig, currently at versions 3.1.14 and 1.13.2, respectively. How do they compare in a benchmark showdown?
I'm pretty cranky about what my templates do (I have been known to roll my own), so I have a small list of must-have features. Listing in order by increasing likelihood that a template engine satisfies them:
- Extensible functions for adding convenience from the host environment
- Built-in functions for date formatting
- No annoying
<? ?>all over the place - Auto-escaping of variables when building HTML
- Conditionals, expressions, and loops (if-elseif-else chains, boolean logic)
- Access to array elements and object properties
cycle, for hopefully obvious reasons.)With that, it looks like the contenders are Smarty and Twig, currently at versions 3.1.14 and 1.13.2, respectively. How do they compare in a benchmark showdown?
Saturday, December 1, 2012
Hairy Escaping Problems (Keep the Pieces 2)
I was just settling in to hack out a Smarty-like template system (or at least an interpreter for it) in a non-PHP language, when my brain went all meta on me. ‘How can I never, ever have to deal with careful manual control over output encoding, ever again?’
Wednesday, March 21, 2012
Language Driven
If templates weren’t languages, we wouldn’t call them template languages, nor have so many of them: HAML, HTML::Mason, TemplateToolkit, PHP, Smarty, pagelib and Output, and so forth.
(This is essentially a repost of something that used to be on my old blog.)
(This is essentially a repost of something that used to be on my old blog.)
Saturday, February 25, 2012
War Story: The day I nearly invented server management
Long before I knew about puppet (or heard about chef via vagrant), I was working on a system with around 100 virtual hosts, nearly all of them configured from a small pool of standard features. This made for a long, complicated vhosts.conf file, which we managed by keeping it in alphabetical order and using search a lot. I realized that a lot of the duplication could be removed by generating it from a template file.
Sunday, August 29, 2010
Pagelib Retrospective
I have always been in love with magic: one of the first languages I taught myself once I was old enough to understand what I was doing was Perl, and it fit me like a skin-tight sci-fi spacesuit that we thought we were all going to wear in the future, back in the 1980's. Steve Yegge's rant about Perl was entertaining, but I can't say as I identified with it much, since references weren't hard for me, nor do I have his problem of forgetting everything when I don't use the language for a while. Maybe I don't drink enough.
Still, being in love with magic and DWIM doesn't mean that there aren't any hazards. It's rather like fairy-tale magic, which can result in nasty, surprising, unexpected consequences if used without the utmost care. This is a story about me exercising a complete and utter lack of care, utmost or otherwise.
Still, being in love with magic and DWIM doesn't mean that there aren't any hazards. It's rather like fairy-tale magic, which can result in nasty, surprising, unexpected consequences if used without the utmost care. This is a story about me exercising a complete and utter lack of care, utmost or otherwise.
Subscribe to:
Posts (Atom)