]> git.imager.perl.org - bse.git/commitdiff
allow in memory caching of templates
authorTony Cook <tony@develop-help.com>
Mon, 11 Jun 2012 06:12:56 +0000 (16:12 +1000)
committerTony Cook <tony@develop-help.com>
Mon, 11 Jun 2012 06:12:56 +0000 (16:12 +1000)
site/cgi-bin/modules/BSE/Template.pm
site/cgi-bin/modules/Squirrel/Template.pm
site/docs/config.pod

index b62556b484bee7da65b3b3927e2f6b6aee4beb93..13b62ba867688368279f9002aa6da18ca8d453b3 100644 (file)
@@ -4,7 +4,7 @@ use Squirrel::Template;
 use Carp qw(confess cluck);
 use Config ();
 
-our $VERSION = "1.007";
+our $VERSION = "1.008";
 
 sub templater {
   my ($class, $cfg, $rsets) = @_;
@@ -42,6 +42,9 @@ sub templater {
     require BSE::Cache;
     $opts{cache} = BSE::Cache->load($cfg);
   }
+  if ($cfg->entry("basic", "cache_templates_locally")) {
+    $opts{cache_locally} = 1;
+  }
 
   $opts{preload} = $cfg->entry("basic", "preload_template");
 
index 465edcfae379a43845778232f223466798e76a21..d13995d0ec95fccfc6c1c81942512aee993b709a 100644 (file)
@@ -19,7 +19,9 @@ BEGIN {
 
 use constant DEBUG_GET_PARMS => 0;
 
-our $VERSION = "1.020";
+our $VERSION = "1.021";
+
+my %compile_cache;
 
 my $tag_head = qr/(?:\s+<:-|<:-?)/;
 my $tag_tail = qr/(?:-:>\s*|:>)/;
@@ -417,8 +419,26 @@ sub parse_filename {
   my $key = "Squirrel::Template::file:$filename";
   my ($date, $size);
 
+  if ($self->{cache_locally}) {
+    ($date, $size) = (stat $filename)[9, 7]
+      unless $date;
+
+    my $cached = $compile_cache{$filename};
+    if ($cached) {
+      if ($cached->[0] == $date && $cached->[1] == $size) {
+       #print STDERR "Found cached $filename / $date / $size\n";
+       return $cached->[2];
+      }
+      else {
+       #print STDERR "Cached but old $filename / $date / $size\n";
+       delete $compile_cache{$filename};
+      }
+    }
+  }
+
   if ($self->{cache}) {
-    ($date, $size) = (stat $filename)[9, 7];
+    ($date, $size) = (stat $filename)[9, 7]
+      unless $date;
 
     my $cached = $self->{cache}->get($key);
     if ($cached) {
@@ -447,6 +467,10 @@ sub parse_filename {
        $self->{cache}->set($key => [ $date, $size, $parsed ]);
       }
 
+      if ($parsed && $self->{cache_locally}) {
+       $compile_cache{$filename} = [ $date, $size, $parsed ];
+      }
+
       return ($parsed, $message);
     }
   }
index b41ebed748c8d91bc952a862f4aee0e8e2bd7c0b..2ddf560204be8a1c780741d3b8d451e2f3111b64 100644 (file)
@@ -444,6 +444,12 @@ If true, BSE will cache compiled templates using the configured BSE
 cache, if any.  Depending on the configured cache this may slow things
 down.  Default: disabled.
 
+=item cache_templates_locally
+
+If true, BSE will cache compiled templates in memory.  This may
+significantly improve performance but may increase memory use.
+Default: disabled.
+
 =item preload_template
 
 Preload the named template, searching the template search part.  Any