This page considers alternative methods of deferred compilation a priori
, that is in advance of actually trying any of them out.
The approach used to defer compilation used in v0.92 is to split the code into three chunks - one that is always compiled, a second that is sometimes compiled ($BrowseCode), and a third that is more rarely compiled ($OtherCode). However by default this feature is commented out, so that all three chunks are always compiled.
Considered options are
- leave everything compiled every time
- enable deferred compilation of $OtherCode (by decommenting the second assignment to the $OtherCode variable at around line 2442)
- additionally allow deferred compilation of $BrowseCode and page cacheing - decommenting second assignment to $BrowseCode (at around line 300) plus setting $UseCache=1 (line 90, or config file)
- Rigourously analyse all combinations of sub calls and reduce the program into many more chunks
- Use SelfLoader to compile each sub from the same file as the UseModWiki module (effectively one sub in each chunk)
- Use AutoSplit/AutoLoader to load each sub individually from separate files (effectively putting each sub chunk in a separate file
- Write a home grown version of SelfLoader that is more efficient because it only does exactly what is needed.
Note that option 3 combines the use of cacheing with $BrowseCode - in the absence of cacheing the $BrowseCode will always be needed and there is no advantage in deferring its compilation.
4 differs from 5 and 7 in that option 4 would need a lot of careful analysis, which would have to be repeated following any significant mod. For this reason I will not consider alternative 4 any further.
6 introduces the additional overhead of a file open for each individual sub, with the saving of the equivalent amount of memory for the code of any uncompiled subs. This would only be a good tradeoff where the majority of subs are never called at all, that is for a very different sort of program than the one we have. So alternative 4 will not be pursued further.
Alternative 7 could be quite easy to code automatically (by a global edit on the wiki.pl file) and if so the extra efficiency could be worthwhile.
This leaves us with alternatives 1, 2, 3, 5, 7 to test. Alternatives 5 and 7 could each be tried with and without page cacheing.
uses the __DATA__ section, which cannot be used under mod_perl's Apache::Registry, a popular way of running CGI's -- ChuckAdams