From dd64c2a9c0d7a1bfe9d3b89957efe8f045091111 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 15 Apr 2010 22:18:56 -0400 Subject: [PATCH] sidebar plugin optimisations 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 | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/IkiWiki/Plugin/sidebar.pm b/IkiWiki/Plugin/sidebar.pm index 808f0bed2..0350f2b71 100644 --- a/IkiWiki/Plugin/sidebar.pm +++ b/IkiWiki/Plugin/sidebar.pm @@ -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); }