[Zope-dev] Benchmarks: DTML vs. ZPT?

Shane Hathaway shane@zope.com
Fri, 08 Feb 2002 12:18:47 -0500


seb bacon wrote:
> Well, I just ran a very naive test and it suggests that zpt may be about
> twice as slow as dtml.
> 
> I made a DTML Method, and a ZPT, identical to each other, containing
> only HTML:
> 
>   <html> 
>    Test
>   </html>
> 
> Then I ran the ab benchmarking tool against each method, thus:
> 
>   # ab -n 500 http://localhost:8005/zpt_test/dtml
> 
> The results are reproduced below, along with the profiling information
> (sorry if it wraps badly)

This is useful information, but it's hard to make sense of it.  For one 
thing, where are the calls to BaseRequest.traverse() in the ZPT test? 
Also, the info seems to suggest that ZPT took 7.810 seconds (total) to 
pt_render(), while DTML took 0.640 seconds (total) to __call__(), but 
there's no suggestion as to why.

Shane



> ------------
> 1. DTML Method
> 
> HTML transferred:       10000 bytes
> Requests per second:    88.15 [#/sec] (mean)
> Time per request:       11.34 [ms] (mean)
> Time per request:       11.34 [ms] (mean, across all concurrent
> requests)
> Transfer rate:          21.16 [Kbytes/sec] received
> 
>  ncalls  tottime  percall  cumtime  percall filename:lineno(function)
>       501    0.090    0.000    5.580    0.011 profile:0()
>       501    0.050    0.000    5.490    0.011 Publish.py:367(pm)
>       501    0.020    0.000    5.440    0.011
> Publish.py:206(publish_module)
>       501    0.200    0.000    5.420    0.011 Publish.py:122(publish)
>       501    0.730    0.001    2.230    0.004
> BaseRequest.py:231(traverse)
>       501    0.200    0.000    1.480    0.003 mapply.py:104(mapply)
>       501    0.050    0.000    0.990    0.002
> Publish.py:111(call_object)
>       500    0.170    0.000    0.930    0.002
> DTMLMethod.py:168(__call__)
>       500    0.310    0.001    0.640    0.001 DT_String.py:434(__call__)
>       501    0.020    0.000    0.560    0.001
> BaseResponse.py:125(outputBody)
>       501    0.100    0.000    0.430    0.001
> __init__.py:247(recordMetaData)
> 
> -------------
> 
> 2. ZPT
> 
> HTML transferred:       10500 bytes
> Requests per second:    47.65 [#/sec] (mean)
> Time per request:       20.99 [ms] (mean)
> Time per request:       20.99 [ms] (mean, across all concurrent
> requests)
> Transfer rate:          11.48 [Kbytes/sec] received
> 
>  ncalls  tottime  percall  cumtime  percall filename:lineno(function)
>       505    0.130    0.000   13.120    0.026 profile:0()
>       505    0.020    0.000   12.990    0.026 Publish.py:367(pm)
>       505    0.080    0.000   12.970    0.026
> Publish.py:206(publish_module)
>       505    0.310    0.001   12.220    0.024 Publish.py:122(publish)
>       505    0.050    0.000    8.370    0.017 mapply.py:104(mapply)
>       505    0.010    0.000    8.320    0.016
> Publish.py:111(call_object)
>       505    0.040    0.000    8.310    0.016 Bindings.py:322(__call__)
>       505    0.050    0.000    8.270    0.016
> Bindings.py:342(_bindAndExec)
>       500    0.220    0.000    8.140    0.016
> ZopePageTemplate.py:238(_exec)
>       500    0.110    0.000    7.810    0.016
> PageTemplate.py:143(pt_render)
>