Template::Timer - Rudimentary profiling for Template Toolkit


Version 1.00


Template::Timer provides inline timings of the template processing througout your code. It's an overridden version of Template::Context that wraps the process() and include() methods.

Using Template::Timer is simple.

    use Template::Timer;

    my %config = ( # Whatever your config is
        INCLUDE_PATH    => '/my/template/path',
        COMPILE_EXT     => '.ttc',
        COMPILE_DIR     => '/tmp/tt',

    if ( $development_mode ) {
        $config{ CONTEXT } = Template::Timer->new( %config );

    my $template = Template->new( \%config );

Now when you process templates, HTML comments will get embedded in your output, which you can easily grep for. The nesting level is also shown.

    <!-- TIMER START: L1 process mainmenu/mainmenu.ttml -->
    <!-- TIMER START: L2 include mainmenu/ -->
    <!-- TIMER START: L3 process mainmenu/ -->
    <!-- TIMER END:   L3 process mainmenu/ (17.279 ms) -->
    <!-- TIMER END:   L2 include mainmenu/ (17.401 ms) -->


    <!-- TIMER END:   L3 process mainmenu/ (3.016 ms) -->
    <!-- TIMER END:   L2 include mainmenu/ (3.104 ms) -->
    <!-- TIMER END:   L1 process mainmenu/mainmenu.ttml (400.409 ms) -->

Note that since INCLUDE is a wrapper around PROCESS, calls to INCLUDEs will be doubled up, and slightly longer than the PROCESS call.


Andy Lester, <andy at>


Please report any bugs or feature requests to bug-template-timer at, or through the web interface at I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.


Thanks to Randal Schwartz, Bill Moseley, and to Gavin Estey for the original code.


This library is free software; you can redistribute it and/or modify it under the terms of either the GNU Public License v3, or the Artistic License 2.0.