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 10Skype: HerrTopf
52064 Aachen Homepage: http://comlounge.net
Tel: +49 241 400 730 0 E-Mail [EMAIL PROTECTED]
Fax: +49 241 979 00 850 IRC: MrTopf, Tao_T
connect with me: http://mrtopf.de/connect
___
Zope-Dev maillist - Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )