plan of attack
[ikiwiki] / doc / todo / Post-compilation_inclusion_of_the_sidebar.mdwn
1 In some sites (mine, for example), the pages are quasi-static, while the sidebar must be updated at each commit
2 (because it contains some lists, like "last posts" or "last updates", or a tagcloud). As this sidebar is included
3 in every page of the site, many commits can potentialy leat to a full re-compilation....
4
5 I think a sidebar included after the compilation (via a SSI mechanism for example) would make sense and 
6 reduce the dependencies.
7
8 Different things could be possible:
9
10 * output as .shtml instead of .html
11 * ignore the sidebar->page dependency links
12 * consider the *real* dependencies; pageA may include the title (only) of pageB, but don't need to be recompiled 
13 after each typo correction on pageB.
14
15 shtml output with open cgi web access is a potential security hole and can DoS the site, but it's not a problem for a 
16 single-editor site.
17
18 NicolasLimare
19
20 > This is a good idea, though sadly not portable enough to be the default.
21 > Especially if the only way to do it is with .shtml.
22 > But I really like the idea of not rebuilding the sidebar all the time. 
23 > Definitly a TODO, for me, if I can figure out how to do it. Patches
24 > eagerly accepted. 
25
26 > I have implemented a htmlext configuration item, that lets you control
27 > what extension ikiwiki uses for output html pages. So in theory, a
28 > sidebar could be done as you describe using .shtml. --[[Joey]]
29
30 [[wishlist]]
31
32 > I have a plan for a way to avoid unecessary rebuilds caused by the
33 > sidebar. The idea is to use wikistate to store what a sidebar renders to.
34 > Then in the needsbuild hook, render sidebar(s) and compare with their
35 > previous stored rendering. If a sidebar's rendered content has changed,
36 > then all pages that display that sidebar need to be forced to be rebuilt.
37
38 > Also, if there is no previous stored rendering for a sidebar, or
39 > if there is a stored rendering for a sidebar page that no longer exists, then
40 > the pages need to be rebuilt. (This should deal with the [[bugs/Building_a_sidebar_does_not_regenerate_the_subpages]] bug.
41
42 > This would also save significant time, since the stored sidebar rendering
43 > could just be dumped into the page by the pagetemplate hook. Current code
44 > re-loads and renders the same sidebar file for every page built!
45
46 > The sticky part is relative links on the sidebar. These would need to
47 > be modified somehow depending on the page that the sidebar is placed on.
48 > Doing that seems hard/tricky. Maybe it would not be worth the optimisation
49 > of using the stored rendering after all, and instead still re-render it for
50 > each page? --[[Joey]]