diff options
author | Joey Hess <joey@kitenet.net> | 2013-11-16 12:48:07 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-11-16 12:48:11 -0400 |
commit | 3aaa33064c4593941559f132632b9d19d9146271 (patch) | |
tree | a5505b7c0e6a7b5388795206a61fef6fa8c405e8 /IkiWiki.pm | |
parent | fae7ed14293a43b5096cb2644b996d136a2b76f7 (diff) | |
download | ikiwiki-3aaa33064c4593941559f132632b9d19d9146271.tar ikiwiki-3aaa33064c4593941559f132632b9d19d9146271.tar.gz |
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.
Diffstat (limited to 'IkiWiki.pm')
-rw-r--r-- | IkiWiki.pm | 14 |
1 files changed, 11 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}, |