summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/inline.pm27
-rw-r--r--debian/changelog3
2 files changed, 26 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 ($) {
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 <joeyh@debian.org> Mon, 16 Nov 2009 15:46:45 -0500