[Zope-dev] Possible performance problem in Page Template engine?

Christian Scholz cs at comlounge.net
Fri Oct 26 18:33:42 EDT 2007


Hi everybody!

When I was trying to fix portlets in Plone I was wondering why the 
render() method of my portlet actually gets called multiple times.

After a bit of investigation I ended up in the Five product in 
browser/providerexpressions.py where provider expressions also seem to 
be called twice for each provider statement.

The problem seems to be in Products/PageTemplates/Expressions.py in line 
199/200 (in Zope 2.10.4):

def evaluateStructure(self, expr):
         """ customized version in order to get rid of unicode
             errors for all and ever
         """
         text = super(ZopeContext, self).evaluateStructure(expr)
         return self._handleText(text, expr)

This construct seems to evaluate expr twice. One time in 
evaluateStructure() of the super class which is basically a call to 
self.evaluate(expr) (to be found in zope/tales/tales.py around line 713:

     def evaluateStructure(self, expr):
         return self.evaluate(expr)

and then again in _handleText():

     def _handleText(self, text, expr):

         text = self.evaluate(expr)

         ...

I now tried to remove the evaluation of expr in handleText() and in a 
very simple test using ab on my site I got twice the speed!

I might be missing something here of course but if every expression is 
evaluated twice then this is of course huge performance drain. And of 
course this fix was just a quick idea without much understanding of the 
underlying engine (e.g. not knowing if _handleText() is also called from 
somewhere else etc.)

So any Page Template experts here who can confirm this?

cheers,

Christian


-- 
Christian Scholz                         video blog: http://comlounge.tv
COM.lounge                                   blog: http://mrtopf.de/blog
Luetticher Strasse 10                                    Skype: HerrTopf
52064 Aachen                              Homepage: http://comlounge.net
Tel: +49 241 400 730 0                           E-Mail cs at comlounge.net
Fax: +49 241 979 00 850                               IRC: MrTopf, Tao_T

connect with me: http://mrtopf.de/connect




More information about the Zope-Dev mailing list