[Templates] Performance cost of 'namespaces'

Perrin Harkins perrin@elem.com
Thu, 3 May 2007 06:53:17 -0400


On 4/25/07, Clinton Gormley <clint@traveljury.com> wrote:
> One of the issues that I am finding in my templates as they become more
> complex, is the problem of namespace collision, ie just remembering what
> variables I have used where, and whether using this variable name is
> going to cause problems at a distance.

What's causing you to need to define variables in your template?  If
it's small, temporary variables for use in parameterized macros and
the like, a naming convention is a reasonable solution.

Another possibility is to use one top-level namespace for things you
pass to process() and another for things you use as temporary
parameters in templates, e.g. stash.* and local.*.  That narrows down
the possibility of collision and makes it pretty manageable.

> I use PROCESS rather than INCLUDE to process other blocks, because "I
> have read" that there is a significant performance cost to localising
> all the variables.
>
> How bad is this?

It's slower than most operations in TT if you have lots of includes.
Maybe it doesn't matter in your application.  Try a quick regex
s/PROCESS/INCLUDE/ and DProf it to know for sure.

> The alternative would be to use my own namespaces in naming variables,
> as in : main.title.xyz
>
> How does this perform in comparison?

I expect that will be quite a bit better than localizing the stash.

- Perrin