[Zope-CMF] Re: Making TypesTool faster
Martin Aspeli
optilude at gmx.net
Thu May 3 03:33:05 EDT 2007
Tres Seaver wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Alexander Limi wrote:
>> On Wed, 02 May 2007 10:03:39 -0700, Martin Aspeli
>> <optilude at gmx.net> wrote:
>>
>>> +1, but I don't think the two need to be mutually exclusive.
>> Amen.
>>
>>> At present, Archetypes-based content types cannot be used with a factory
>>> (I
>>> tried hard, but there are some acquisition-related/factory related
>>> reasons);
>>> I'd like to refactor this, but we can't for Plone 3.0 at least.
>> Right. Obviously, we'd like to do this "the proper way", but we can't do
>> that for a while yet.
>
> I do have a notion which would make this "better, faster, stronger" for
> Plone, which is much more afflicted by this problem than other CMF-based
> sites (because it presents an add menu on each page): I think the
> bottleneck is actually inside 'ATContentTypes.lib.contraintypes', in the
> 'getDefaultAddableTypes' method of the 'ConstrainTypesMixin' class: it
> could cache the typeinfo list (or a list of mappings derived from it),
> with the container and the user_id as keys.
>
> Most of the win would come immediatelely, and at the place most affected
> by the clurrent slowness, leaving us time to figure out why Z3-style
> factories don't work with AT.
I know why... or rather, I did know, and I'm sure if I looked it again I
could remember. It has to do with the extra work that's being done in
the auto-generated factory (see ClassGen.py) which calls
initializeArchetype(). I'd love to get rid of this (for various
reasons), but I tried to rewrite it as a factory and failed (this is
where I don't remember why).
>>> Given that Alec & co essentially had a patch which worked, I suggest
>>> that we
>>> have a look at it, and include it if possible, and then encourage the use
>>> factories in general. I'd hope we could avoid deprecating it outright
>>> until
>>> we can fix up AT to use them, though.
>> Also note that according to Alec, it would work better as a instance-level
>> thing than a thread-level one.
>
> The cache is actually based only on the container (which could be a
> path) and the user ID. It would be a perfect use of a RAM Cache Manager
> (assuming that we cached mappings rather than persistent references).
> Using a volatile here (which is what I assume you mean) would dilute the
> "locality" of the cache by the number of database connections in use.
>
> I've looksd, and all the callers of 'getDefaultAddableTypes' need only
> the ID and / or the title of the FTI, which simplifies things a bunch.
>
>> Isn't this something like 2 lines of code in TypesTool? :)
>
> I don't think so. Getting the tests right is likely to be *lots* of
> lines of code in 'tests/test_TypesTool.py', if we make the change there.
I feel like we're having a very abstract discussions here. Have you
looked at the patch Alec/Ben/Mike/Rob did? If not, Limi - can you find
it and paste it here so that we can discuss its merits? I don't recall
whether it came with tests, but even so it didn't look terribly complicated.
Martin
More information about the Zope-CMF
mailing list