From: Joey Hess Date: Tue, 17 Nov 2009 06:29:28 +0000 (-0500) Subject: inline: Use caching of inlined pages to speed up builds of inlines that include feeds. X-Git-Tag: 3.20091202~48 X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/da92e91769945648500819508374e2b15b79fdc8 inline: Use caching of inlined pages to speed up builds of inlines that include feeds. Speedup of about 25% for small inlines; could be much larger for inlines of many, or complex pages. Not bloating memory with excessive memoization data was the key to this. The method chosen does not squeeze out every erg of speed possible when inlines are nested, but that's rare. It uses less memory than other optimisation hacks (I'm looking at you, f937c1fb8074a512d8bb788fa275f5e90595cd47 !) already used in inline.pm. --- diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index f89209a1b..29729a414 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -423,6 +423,8 @@ sub preprocess_inline (@) { } } + clear_inline_content_cache(); + return $ret if $raw || $nested; push @inline, $ret; return "
\n\n"; @@ -437,25 +439,42 @@ sub pagetemplate_inline (@) { if exists $feedlinks{$page} && $template->query(name => "feedlinks"); } +{ +my %inline_content; +my $cached_destpage=""; + sub get_inline_content ($$) { my $page=shift; my $destpage=shift; + if (exists $inline_content{$page} && $cached_destpage eq $destpage) { + return $inline_content{$page}; + } + my $file=$pagesources{$page}; my $type=pagetype($file); + my $ret=""; if (defined $type) { $nested++; - my $ret=htmlize($page, $destpage, $type, + $ret=htmlize($page, $destpage, $type, linkify($page, $destpage, preprocess($page, $destpage, filter($page, $destpage, readfile(srcfile($file)))))); $nested--; - return $ret; } - else { - return ""; + + if ($cached_destpage ne $destpage) { + clear_inline_content_cache(); + $cached_destpage=$destpage; } + return $inline_content{$page}=$ret; +} + +sub clear_inline_content_cache () { + %inline_content=(); +} + } sub date_822 ($) { diff --git a/debian/changelog b/debian/changelog index 1abd4de4d..31c28941a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,9 @@ ikiwiki (3.20091114) UNRELEASED; urgency=low enabled. * meta: Allow use of DESCRIPTION in templates to get at the meta description value. (Thanks, NicolasLimare) + * inline: Use caching of inlined pages to speed up builds of inlines that + include feeds. Speedup of about 25% for small inlines; could be much + larger for inlines of many, or complex pages. -- Joey Hess Mon, 16 Nov 2009 15:46:45 -0500