| #!/usr/bin/env python |
| # |
| # A simple benchmark of tornado template rendering, based on |
| # https://github.com/mitsuhiko/jinja2/blob/master/examples/bench.py |
| |
| import sys |
| from timeit import Timer |
| |
| from tornado.options import options, define, parse_command_line |
| from tornado.template import Template |
| |
| define('num', default=100, help='number of iterations') |
| define('dump', default=False, help='print template generated code and exit') |
| |
| context = { |
| 'page_title': 'mitsuhiko\'s benchmark', |
| 'table': [dict(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10) for x in range(1000)] |
| } |
| |
| tmpl = Template("""\ |
| <!doctype html> |
| <html> |
| <head> |
| <title>{{ page_title }}</title> |
| </head> |
| <body> |
| <div class="header"> |
| <h1>{{ page_title }}</h1> |
| </div> |
| <ul class="navigation"> |
| {% for href, caption in [ \ |
| ('index.html', 'Index'), \ |
| ('downloads.html', 'Downloads'), \ |
| ('products.html', 'Products') \ |
| ] %} |
| <li><a href="{{ href }}">{{ caption }}</a></li> |
| {% end %} |
| </ul> |
| <div class="table"> |
| <table> |
| {% for row in table %} |
| <tr> |
| {% for cell in row %} |
| <td>{{ cell }}</td> |
| {% end %} |
| </tr> |
| {% end %} |
| </table> |
| </div> |
| </body> |
| </html>\ |
| """) |
| |
| def render(): |
| tmpl.generate(**context) |
| |
| def main(): |
| parse_command_line() |
| if options.dump: |
| print tmpl.code |
| sys.exit(0) |
| t = Timer(render) |
| results = t.timeit(options.num) / options.num |
| print '%0.3f ms per iteration' % (results*1000) |
| |
| if __name__ == '__main__': |
| main() |