]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki.pm
Improve the speed of match_glob
[ikiwiki.git] / IkiWiki.pm
index 08a3d7875da6b9941000b4531755fcb2a6f42d49..75b7a7b3e116e84e7708a73845cef01a02b02aa4 100644 (file)
@@ -2482,6 +2482,8 @@ sub derel ($$) {
        return $path;
 }
 
+my %glob_cache;
+
 sub match_glob ($$;@) {
        my $page=shift;
        my $glob=shift;
@@ -2489,8 +2491,14 @@ sub match_glob ($$;@) {
        
        $glob=derel($glob, $params{location});
 
-       my $regexp=IkiWiki::glob2re($glob);
-       if ($page=~/^$regexp$/i) {
+       # Instead of converting the glob to a regex every time,
+       # cache the compiled regex to save time.
+       if (!exists $glob_cache{$glob}
+                       or !defined $glob_cache{$glob}) {
+               my $re = IkiWiki::glob2re($glob);
+               $glob_cache{$glob} = qr/^$re$/i;
+       }
+       if ($page=~ $glob_cache{$glob}) {
                if (! IkiWiki::isinternal($page) || $params{internal}) {
                        return IkiWiki::SuccessReason->new("$glob matches $page");
                }