[Zope-dev] implementing zope.component 4.0

Adam GROSZER agroszer at gmail.com
Sun Nov 29 15:47:40 EST 2009

Hello Hanno,

Seems that that was an adapter heavy app.

Was before the cut:

 >>> len(getGlobalSiteManager()._utility_registrations)
 >>> len(getGlobalSiteManager()._adapter_registrations)
 >>> len(getGlobalSiteManager()._handler_registrations)
 >>> len(getGlobalSiteManager()._subscription_registrations)

After the cut:
 >>> len(getGlobalSiteManager()._utility_registrations)
 >>> len(getGlobalSiteManager()._adapter_registrations)
 >>> len(getGlobalSiteManager()._handler_registrations)
 >>> len(getGlobalSiteManager()._subscription_registrations)

So around 1/3 of the registrations was gone and that made a difference
(well, with z3c.form generated forms).

Would be interesting to profile how many adapter lookups are done by a
simple z3c.form to render...

Saturday, November 28, 2009, 2:32:50 PM, you wrote:

HS> On Sat, Nov 28, 2009 at 12:14 PM, Martijn Faassen
HS> <faassen at startifact.com> wrote:
>> Adam GROSZER wrote:
>>> I had a feeling that adapter lookup can be alone slowish with lots of
>>> registrations.
>>> We had a large project that was cut in half and the z3c.form UI, which
>>> is rather heavily adaptation based got a boost after that.

HS> What is a "large project" in your case? Just as an example here's the
HS> "size" of the global registry in a typical Plone project:

 >>>> getGlobalSiteManager()
HS>  <BaseGlobalComponents base>
 >>>> len(getGlobalSiteManager()._utility_registrations)
HS>  1091
 >>>> len(getGlobalSiteManager()._adapter_registrations)
HS>  1283
 >>>> len(getGlobalSiteManager()._handler_registrations)
HS>  139
 >>>> len(getGlobalSiteManager()._subscription_registrations)
HS>  3

>> Interesting. It'd be interesting to do some experiments with this. Could
>> you perhaps look into writing some kind of stress-test script?

HS> I haven't done any real performance measurements but the various
HS> zope.interface/component API's are among the top of every profile run
HS> I do in Plone.

HS> To me it looks like checking if an interface is provided by a context
HS> is non-trivial and the main bottleneck in our case. The classes
HS> underlying our typical contexts are pretty fat classes with a long
HS> inheritance chain contributing dozens of interfaces.

HS> The actual registry lookups seem to be rather fast, they should be
HS> essentially dict lookups, which perform well with a dict size of just
HS> about 1000.

HS> On the other hand I noticed that z3c.form and it's use of the ZCA is
HS> indeed much slower than stitching forms together via ZPT macros as
HS> done for example by Archetypes.

HS> Hanno
HS> _______________________________________________
HS> Zope-Dev maillist  -  Zope-Dev at zope.org
HS> https://mail.zope.org/mailman/listinfo/zope-dev
HS> **  No cross posts or HTML encoding!  **
HS> (Related lists - 
HS>  https://mail.zope.org/mailman/listinfo/zope-announce
HS>  https://mail.zope.org/mailman/listinfo/zope )

Best regards,
 Adam GROSZER                            mailto:agroszer at gmail.com
Quote of the day:
The only way to amuse some people is to slip and fall on an icy pavement.

More information about the Zope-Dev mailing list