--On 27. Oktober 2007 00:33:42 +0200 Christian Scholz <cs@comlounge.net> wrote:
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!
The evaluate() call within _handleText() is a culprit from my refactoring. However I see this code only on the trunk. It is not contained on the 2.10 branch. Anyway...I removed the culprit from the trunk and everything should be fast again. Andreas