[Grok-dev] Re: KSS lag?

Balazs Ree ree at ree.hu
Sun Jan 13 02:14:14 EST 2008

Hi Daniel,

On Sat, 12 Jan 2008 17:48:38 -0500, daniel wrote:

> On Jan 12, 2008 5:08 PM, Godefroid Chapelle <gotcha at bubblenet.be> wrote:
>> daniel wrote:
>> > Thanks,
>> >
>> > Here are my results on FireFox 3 beta2 with firebug 1.1b10:
>> >
>> >
>> > Console in debug:
>> > http://img242.imageshack.us/img242/9189/
>> > <http://img242.imageshack.us/img242/9189/
>> >
>> > Notice the two errors in the console.
>> I am surprised, I do not see those errors on my machine.
>> Which FF version do you use ?
> *firefox 3 beta2 for the screenshots with the errors. They don't appear
> in other versions.*

We have not tested with FireFox 3 beta yet. We will certainly check out 
this problem, and make sure to handle it before FireFox 3 goes to stable: 
either by fixing the bug in Zope/kss, or reporting it to FireFox for a 

>> I do not understand what you say here : do you mean that this 12 secs
>> delay happens at *each* page load even in dev mode ?
>> In dev mode, we cache kukit.js in memory in the server : IOW , the
>> first time kukit.js is requested after server restart, it will be long.
>> However, the latter request should be very quick.
>> Can you give more details ?
> *the 12 second delay happens not because of a server restart, but
> because I cleared my browser's cache. It only happens once, the first
> time after a browser cache clear. It occurs whether KSS was in
> production or devel mode.* *The subsequent page loads only take 1.4
> seconds unless I clear the browser cache again.*

With kss we follow the exact same resource handling strategy of what Zope 
does (with some small improvements that I would not enter here). 

This is the following: Zope does _not_ ever cache the 
resources themselves. If the browser asks for the resource with the If-
Modified-Since header set, and the resource has not changed since (ie, if 
Zope is not in debug mode, this is always the case between restarts), 
then Zope does _not_ return the resource but simply says "the resource 
has not changed". This instructs the browser "Use what you have!". 
However if the browser does _not_ set the If-Modified-Since header, then 
this tells Zope that it needs to provide the resource unconditionally, 
and the kukit.js is cooked again (slow).

This means if you force to clear all the caches then this is the expected 
behaviour. If Zope is asked to provide the resource, it will provide it, 
and since it is not cached inside Zope, it needs to cook it again.

We also started to implement different caching strategies with the 
kukit.js resource handling, this can be set from the concatresource.zcml 
file in kss.core. Namely: in-memory caching of the cooked resource is 
possible. However this is only to speed up work during development, and 
is _not_ intended to use in production. While it would be possible to 
implement more sophisticated caching strategies (like on-disk caching) of 
the resource from within Zope, there is a much better way to achieve 
this: in production you should _always_ use an upstream cache (Squid, 
apache mod_cache, etc.) which does this job in a much better way then 
what we could implement, and results that the requests for kukit.js will 
not ever reach Zope for a second time.

With this I am not saying that we will not improve the caching story of 
kss, We will make necessary improvements to speed up life of the 
developer. But: in production, I believe that instead of reimplementing 
custom caching solutions inside Zope, we should rely on existing 
solutions (like Squid) specialized for this task.

In addition: obviously we need to start testing with this new browser 
version and most particularly, have a look if it sends the If-Modified-
Since headers to Zope in the correct way.

Best wishes

Balazs Ree

More information about the Grok-dev mailing list