Re: Slowdown on GAE using pre-compiled templates
[email protected] Wed, 14 Oct 2009 11:20:59 -0700
| Newsgroups | gmane.comp.python.cheetah |
|---|---|
| Message-ID | <20091014182059.GO9649@banana> |
On Wed, 14 Oct 2009, Arun Kumar wrote:
> i came across a problem using Cheetah on Google App Engine (GAE). When i
> used pre-compiled templates, the time to render some 500 rows of a table
> was over 140 seconds. Using dynamically compiled templates the page was
> rendering in about 200ms.
>
> After chatting with rtyler on irc and doing some profile tests, we
> managed to narrow the problem down to the valueFromFrameOrSearchList
> call from Cheetah/NameMapper.py. Which appears to be the main difference
> between the two. The dynamically compiled templates uses
> valueFromSearchList (and not VFFSL).
To help back this up with some of the numbers we were looking at, here's
some of the profiler results from running the pre-compiled template with
useStackFrames=True:
85442921 function calls (85412686 primitive calls) in 141.942 CPU seconds
Ordered by: internal time
List reduced from 153 to 80 due to restriction <80>
ncalls tottime percall cumtime percall filename:lineno(function)
160087/160064 48.591 0.000 103.762 0.001 /usr/lib/python2.5/inspect.py:408(getmodule)
19768401 26.590 0.000 36.291 0.000 /usr/lib/python2.5/inspect.py:35(ismodule)
22574035 11.350 0.000 11.350 0.000 {isinstance}
15176510 10.810 0.000 10.810 0.000 {hasattr}
14517734 6.690 0.000 6.690 0.000 {method 'get' of 'dict' objects}
286859 4.140 0.000 6.590 0.000 /usr/lib/python2.5/posixpath.py:373(normpath)
286831 3.410 0.000 13.300 0.000 /home/arun/projects/libraries/google_appengine/google/appengine/tools/dev_appserver.py:1106(__call__)
525212 2.690 0.000 2.690 0.000 {built-in method match}
280312/280112 2.530 0.000 39.211 0.000 /usr/lib/python2.5/inspect.py:381(getsourcefile)
140056 2.400 0.000 119.022 0.001 /usr/lib/python2.5/inspect.py:454(findsource)
290316 2.050 0.000 7.140 0.000 /usr/lib/python2.5/inspect.py:342(getfile)
140056 1.750 0.000 142.182 0.001 /usr/lib/python2.5/inspect.py:820(getframeinfo)
70029 1.510 0.000 1.510 0.000 {method 'items' of 'dict' objects}
2592375 1.360 0.000 1.360 0.000 {method 'append' of 'list' objects
While the slowdown doesn't directly come from Cheetah itself, it comes
from Google App Engine's suboptimal sandboxing implementation of the
'inspect' module (and related features).
> One option to circumvent this problem has been to use the
> 'useStackFrames=False' #compiler-settings. That seems to get the page to
> render at about the same speed as the dynamically generated template.
>
> Let me know if anyone wants the profile tests, I can send you a link to
> a small GAE app, which you can run (using the GAE SDK) and check results.
Thanks for the mail Arun; I'm looking forward to further refining your
cStringIO patchset to squeeze a little more performance out of Cheetah
:)
Cheers,
-R. Tyler Ballance
------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Cheetahtemplate-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
signature.asc
(application/pgp-signature, 197 B)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEARECAAYFAkrWFosACgkQFCbH3D9R4W+xOQCgi0TKd7AYbzBdF2sVNrngP06m YrcAn2P5bLefb3HGTHcyDFIKiU4EoHZ8 =5dUl -----END PGP SIGNATURE-----