It is dangerous to call certain functions in the Func API before the TWiki engine
and all its plugins are fully initialized. The
addToHEAD()
function for example
calls
handleCommonTags()
which as a consequence invokes the plugin's tag
handlers before their
initPlugin()
has finished. Am I paranoid or are we
just lucky by now?
In general
initPlugin()
should be rather lean and any further plugin initialization
should be defered until the plugin is actually needed.
This item applies to
all plugins actually but the
TwistyPlugin is the first I came
accross... fixed in SVN 8807.
As a consequence
PatternSkin must import twisty's css and js whether the
TwistyPlugin
is installed or not...fixed in SVN 8809.
MD
So you want the Pattern skin to load - or rather the browser to load - a css file and a js file - even if it is not needed?
One reason why Dakar is slower than Cairo is because the browser needs to check for all these many files on each read. And the first topic you load from a TWiki like mine (bandwidth is limited to the 512 kbit that the ADSL can carry) takes ages to load. I already have several nasty remarks from my users. I would appreciate if things I do not need are not loaded ever by the browser.
Try and run Ethereal and watch your browsers activities loading a simple Dakar topic. Try the same in a Cairo. The number of files loaded has tripled. The number of bytes loaded tripled.
KJL
Kenneth, I share your concerns about too many file requests per page but I fear you didn't understand what has been
addressed here and maybe I haven't been verbose enough about that either. I fact the changes to the
TwistyPlugin
do exactly what you are demanding:
not to call for the twisty css and js if it is not used. That is
exactly what my
modification does...besides calling
addToHEAD()
being dangerous in
initPlugin()
as it calls
handleCommonTags()
which, for example, freaked the
mailnotify
command line tool.
The
PatternSkin, however, calls for twisty's css and js on every page. This was the case before and after my changes.
The only drawback is, when you use the
PatternSkin and the
TwistyPlugin, there are two links to
twisty.css
and
twisty.js
. BUT only if the current topic uses a twisty button !!! I doubt that there are four requests for two files
done by the browser.
There's no way that
PatternSkin and
TwistyPlugin can communicate
in both directions what they've already loaded
and what not, even not using context variables (or I missed something). Given, the
TwistyPlugin sets a a context variable
called
TwistyPluginDoneHEAD
and the
PatternSkin templates would check that, the opposite direction is not possible so
that the
TwistyPlugin detected that the
PatternSkin already loaded the css and js files (is there?).
MD