This is an old revision of the document!
Note: template generation is usually a small fraction of application's runtime. Before worrying about template performance, use profiler (e.g. XDebug + KCacheGrind) to verify that you're not barking up the wrong tree.
The most important thing is to install PHP accelerator like APC. If you're concerned about speed, it's crazy not to use one.
PHPTAL caches compiled templates on disk. Using
memcached for template cache would be slower. Opcode accelerators like APC have their own in-memory cache and — most important — they store PHP code as compiled opcodes.
PHP has no way of storing compiled code in
memcached, so the only way to use
memcached is to
eval() read templates, and that is the slowest way to run PHP code. Just letting APC to cache on-disk files is the fastest option.
On every request PHPTAL also checks if source template has changed. You can implement your own
Source classes to avoid file timestamp checks or to load TAL template sources in a different way.
If you want PHP not to touch disk at all, also disable
Note: don't do this unless you absolutely need to. Disabling stat gives only tiny performance improvements, but without it PHP and PHPTAL won't notice when files are updated.
In templates expressions that have multiple path components (
foo/bar/baz) require some extra run-time checks. You can change those expressions to use
php: modifier (e.g.
php:foo.bar['baz']), which is a little bit faster.
Instead of using same complex expression multiple times, use
tal:define to "cache" its value. Access to
tal:defined variables is quick.
phptal:cache to cache parts of templates that are very costly to generate. Currently there's no support for integration of
memcached, but it's planned.