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.
+ clear_inline_content_cache();
+
return $ret if $raw || $nested;
push @inline, $ret;
return "<div class=\"inline\" id=\"$#inline\"></div>\n\n";
return $ret if $raw || $nested;
push @inline, $ret;
return "<div class=\"inline\" id=\"$#inline\"></div>\n\n";
if exists $feedlinks{$page} && $template->query(name => "feedlinks");
}
if exists $feedlinks{$page} && $template->query(name => "feedlinks");
}
+{
+my %inline_content;
+my $cached_destpage="";
+
sub get_inline_content ($$) {
my $page=shift;
my $destpage=shift;
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 $file=$pagesources{$page};
my $type=pagetype($file);
if (defined $type) {
$nested++;
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--;
linkify($page, $destpage,
preprocess($page, $destpage,
filter($page, $destpage,
readfile(srcfile($file))))));
$nested--;
+
+ if ($cached_destpage ne $destpage) {
+ clear_inline_content_cache();
+ $cached_destpage=$destpage;
+ return $inline_content{$page}=$ret;
+}
+
+sub clear_inline_content_cache () {
+ %inline_content=();
+}
+
enabled.
* meta: Allow use of DESCRIPTION in templates to get at the meta description
value. (Thanks, NicolasLimare)
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
-- Joey Hess <joeyh@debian.org> Mon, 16 Nov 2009 15:46:45 -0500