sidebar plugin optimisations
authorJoey Hess <joey@gnu.kitenet.net>
Fri, 16 Apr 2010 02:18:56 +0000 (22:18 -0400)
committerJoey Hess <joey@gnu.kitenet.net>
Fri, 16 Apr 2010 02:18:56 +0000 (22:18 -0400)
The pagetemplate hook may be called multiple times, for example when pages
are inlined into a page. Sidebars were being calculated each time that
happened, only to be thrown away when the final pagetemplate hook was
called. Avoid this unnecessary work.

Remove stored sidebar content on use to save some memory.

IkiWiki/Plugin/sidebar.pm

index 808f0bed29d8dea4349874109b53e109501f6511..0350f2b71d7fc20695c169daa4ef967e591b22fe 100644 (file)
@@ -60,7 +60,7 @@ my $oldcontent;
 sub sidebar_content ($) {
        my $page=shift;
        
-       return $pagesidebar{$page} if defined $pagesidebar{$page};
+       return delete $pagesidebar{$page} if defined $pagesidebar{$page};
 
        return if ! exists $pagesidebar{$page} && 
                defined $config{global_sidebars} && ! $config{global_sidebars};
@@ -97,11 +97,10 @@ sub sidebar_content ($) {
 sub pagetemplate (@) {
        my %params=@_;
 
-       my $page=$params{page};
        my $template=$params{template};
-       
-       if ($template->query(name => "sidebar")) {
-               my $content=sidebar_content($page);
+       if ($params{destpage} eq $params{page} &&
+           $template->query(name => "sidebar")) {
+               my $content=sidebar_content($params{destpage});
                if (defined $content && length $content) {
                        $template->param(sidebar => $content);
                }