On Mar 7, 2011, at 9:53 AM, Ludovic Dubost wrote:

> Le 06/03/11 22:08, Paul Libbrecht a écrit :
>> Sergiu,
>> 
>> Sure, caching can be dangerous and can and should be invalidatable.
>> That's the reason the browsers generally do not rely only on their cache but 
>> rely on "validating their cache" doing a call with the addition of 
>> "If-Modified-Since". What allows them to keep their cached result is the 
>> response "Not Modified". A very good explanation is that of Mark Nottingham 
>> http://www.mnot.net/cache_docs/
>> 
>> Where this is a major performance gainer is that it's not only the html (or 
>> js, jpeg, or png) stream that is cached but all the analysis based on that 
>> (for example the computation of styles, the js compilation, or the jpeg 
>> profile adjustments, provided they also don't change).
>> 
>> I disagree with Ludovic that says that it almost always changes: for a given 
>> browser it does mostly not when you do back for example.
> I think what I'm saying is that we cannot do "cross-user" caching as the 
> result of each template is almost always personalized.
> Of course we could have a per-user cache but I'm not sure it would be very 
> memory efficient.
>> I agree with Sergiu that application developers should not have cache hold 
>> their updates and probably should only enable a cache when they are aware of 
>> it but currently, they can only invalidate the xwiki cache by saving again 
>> the given page. That sure is too limited!
>> 
>> Ludovic, your "usage statistics of macros" is a tool lots of people would 
>> put to good use. If you could publish that, it could be put to good use.
> 
> This was just a simple hack:
> 
> #macro(template $tname)
> #set($time1 = $xwiki.date.time)
> $xwiki.parseTemplate($tname)
> #set($time2 = $xwiki.date.time)
> #set($dtime1 = $time2 - $time1)
> Time $tname: $dtime1
> #end
> 
> Now it will only work with 3.0 because it needs velocity 1.7 which has a 
> stack for variables.
> With older versions I think the variables will overwrite themselves on 
> recursive calls.
> 
> We could put this in the core in parseTemplate with an option.

If we want to do this it could be done using an aspect (we're already doing 
something similar):
http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-core/src/main/aspect/debug/

See also
http://dev.xwiki.org/xwiki/bin/view/Community/Debugging#HGeneratingadebugversionofXWiki

Thanks
-Vincent

> We also have the old monitor plugin which implements a strategy for that type 
> of stuff.
> Since it's a plugin we could expose it in velocity:
> 
> http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/monitor/api/MonitorPlugin.java
> 
> At the time I used this plugin a lot to verify that storage was behaving as I 
> wanted.
> 
> Ludovic
> 
>> paul
>> 
>> 
>> Le 6 mars 2011 à 10:41, Ludovic Dubost a écrit :
>> 
>>>>> So implementing caches on all this is a good way to keep performance good.
>>>> I think this is not the right approach. Caching always introduces
>>>> surprises. Image we cache the "recently viewed" panel. The user views
>>>> some documents, but that panel doesn't show them, but insists on
>>>> displaying things from 5 minutes ago. Buggy feature...
>>>> 
>>>> Imagine we cache the homepage, and I go and create a new "product", and
>>>> go to the homepage and don't see it there. What do I do? Panic? Say it's
>>>> a bug and call the IT guy only to look like a fool later when I try to
>>>> show it? Report a bug to those developers only to have it closed as
>>>> "won't fix, duplicate of the other 30 issues reported this month"?
>>>> 
>>> Of course caching needs to be use with intelligence and should be used only 
>>> on content that you can invalidate the cache for.
>>> But the numbers shown higher up, show that a significant portion of the 
>>> load time is actually in certain scripts (panels or home page) that are 
>>> costly by nature and quite almost the same from one run to another.
>>> 
>>> It's not something that is problematic by essence but this is something an 
>>> administrator needs to be aware of.
>>> It's known that an entry point should be fast. For instance Google does not 
>>> use a dynamic page for it's search box.
>>> Having a cost of 2 seconds to display the boxes from our home page is a 
>>> killer.
>>> 
>>> Another thing that it shows is that indeed there is a lot of time in many 
>>> little things. 37 templates, thousands of calls to the prefs and to the 
>>> message API (you forgot that one).
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to