diff options
author | Joey Hess <joey@gnu.kitenet.net> | 2009-11-17 01:29:28 -0500 |
---|---|---|
committer | Joey Hess <joey@gnu.kitenet.net> | 2009-11-17 01:29:28 -0500 |
commit | da92e91769945648500819508374e2b15b79fdc8 (patch) | |
tree | 90bb4043ce8016100fd211ef3b939a05bd3c9e17 /IkiWiki | |
parent | c46b19371a983d5e066494143dd66a3a05f305bd (diff) | |
download | ikiwiki-da92e91769945648500819508374e2b15b79fdc8.tar ikiwiki-da92e91769945648500819508374e2b15b79fdc8.tar.gz |
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.
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/Plugin/inline.pm | 27 |
1 files changed, 23 insertions, 4 deletions
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 "<div class=\"inline\" id=\"$#inline\"></div>\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 ($) { |