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

2007-10-27 Thread Andreas Jung


--On 27. Oktober 2007 00:33:42 +0200 Christian Scholz <[EMAIL PROTECTED]> 
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



pgpLjFwlgIaks.pgp
Description: PGP signature
___
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 )


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

2007-10-26 Thread Christian Scholz

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 )