Alvin Wang ha scritto:
Just curious.  How much slower?


10 times!

[EMAIL PROTECTED]:~/projects/tests/django$ python static.py
33.58 usec/pass

[EMAIL PROTECTED]:~/projects/tests/nevow$ python static.py
344.71 usec/pass

On a Dell Inspiron 6400 with an Intel Duo Core 2 7200 processor.




Here is the Python code:

import timeit
import random
from nevow import inevow, rend, loaders

COLS = 5
ROWS = 20

class Main(rend.Page):
    docFactory = loaders.xmlfile("template.xhtml")


    def data_header(self, ctx, data):
        return range(COLS)

    def data_table(self, ctx, data):
        return  [
            [random.random() for j in range(COLS)]
            for i in range(ROWS)
            ]

main = Main()

t = timeit.Timer("main.renderSynchronously()",
                 "from __main__ import main")
print "%.2f usec/pass" % (10000 * t.timeit(number=1000) / 1000)

and the template:

<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>

<html xmlns="http://www.w3.org/1999/xhtml";
      xmlns:n="http://nevow.com/ns/nevow/0.1";
      lang="en" xml:lang="">
  <head>
    <title>Test Nevow performance</title>
  </head>
  <body>
    <table>
      <caption>RandomTable</caption>
      <thead>
        <tr n:render="sequence" n:data="header">
          <th n:pattern="item" n:render="string" />
        </tr>
      </thead>
      <tbody n:render="sequence" n:data="table">
        <tr n:pattern="item" n:render="sequence">
          <td n:pattern="item" n:render="string" />
        </tr>
      </tbody>
    </table>
  </body>
</html>


Now here is the Django code:

import timeit
import random

from twisted.python import util
from django.conf import settings

# Ugh!
settings.configure(TEMPLATE_DIRS=[util.sibpath(__file__, '')])

from django.shortcuts import render_to_response
from django.db import connection

COLS = 5
ROWS = 20

def view():
    header = range(COLS)
    table = [
            [random.random() for j in range(COLS)]
            for i in range(ROWS)
            ]

    return render_to_response('template.xhtml',
                              {"table": table, "header": header})


t = timeit.Timer("view()", "from __main__ import view")
print "%.2f usec/pass" % (10000 * t.timeit(number=1000) / 1000)

and the template:

<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>

<html xmlns="http://www.w3.org/1999/xhtml";
      xmlns:n="http://nevow.com/ns/nevow/0.1";
      lang="en" xml:lang="en">
  <head>
    <title>Test Django performance</title>
  </head>
  <body>
    <table>
      <caption>RandomTable</caption>
      <thead>
        <tr>
          {% for i in header %}
            <th>{{ i }}</li>
          {% endfor %}
        </tr>
      </thead>
      <tbody>
        {% for i in table %}
          <tr>
            {% for j in i %}
              <td>{{ j }}</td>
            {% endfor %}
          </tr>
        {% endfor %}
      </tbody>
    </table>
  </body>
</html>



Regards  Manlio Perillo

_______________________________________________
Twisted-web mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web

Reply via email to