From 3aaa33064c4593941559f132632b9d19d9146271 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 16 Nov 2013 12:48:07 -0400 Subject: [PATCH] Optmised loadindex by caching the page name in the index. I have benchmarked the pagename() call this avoids taking up to 2 seconds for a loadindex in a large wiki. The total loadindex for that wiki was 6.46s, so this is a significant improvment. Even on a smaller site, this reduces the refresh time from 1.69 to 1.52 seconds. The only breakage risk here is that pagename() can change the page name it calculates due to setup changes. But in the case of a setup change, the whole site is rebuilt. So the cached page name is not used in that case. --- IkiWiki.pm | 14 +++++++++++--- debian/changelog | 1 + 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/IkiWiki.pm b/IkiWiki.pm index 9ccb92a4d..af8e07d7f 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -1781,7 +1781,8 @@ sub enable_commit_hook () { sub loadindex () { %oldrenderedfiles=%pagectime=(); - if (! $config{rebuild}) { + my $rebuild=$config{rebuild}; + if (! $rebuild) { %pagesources=%pagemtime=%oldlinks=%links=%depends= %destsources=%renderedfiles=%pagecase=%pagestate= %depends_simple=%typedlinks=%oldtypedlinks=(); @@ -1821,10 +1822,16 @@ sub loadindex () { foreach my $src (keys %$pages) { my $d=$pages->{$src}; - my $page=pagename($src); + my $page; + if (exists $d->{page} && ! $rebuild) { + $page=$d->{page}; + } + else { + $page=pagename($src); + } $pagectime{$page}=$d->{ctime}; $pagesources{$page}=$src; - if (! $config{rebuild}) { + if (! $rebuild) { $pagemtime{$page}=$d->{mtime}; $renderedfiles{$page}=$d->{dest}; if (exists $d->{links} && ref $d->{links}) { @@ -1895,6 +1902,7 @@ sub saveindex () { my $src=$pagesources{$page}; $index{page}{$src}={ + page => $page, ctime => $pagectime{$page}, mtime => $pagemtime{$page}, dest => $renderedfiles{$page}, diff --git a/debian/changelog b/debian/changelog index fcd47494d..0f6a44c30 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,7 @@ ikiwiki (3.20130904.2) UNRELEASED; urgency=low * Fixed unncessary tight loop hash copy in saveindex where a pointer can be used instead. Can speed up refreshes by nearly 50% in some circumstances. + * Optmised loadindex by caching the page name in the index. -- Joey Hess Thu, 05 Sep 2013 10:01:10 -0400 -- 2.39.5