Mercurial > genshi > genshi-test
comparison examples/bench/run.py @ 57:b387cf24d329
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
author | cmlenz |
---|---|
date | Tue, 04 Jul 2006 18:19:22 +0000 |
parents | |
children | 352d176b4f06 |
comparison
equal
deleted
inserted
replaced
56:950f75b72a1e | 57:b387cf24d329 |
---|---|
1 from cgi import escape | |
2 from datetime import datetime, timedelta | |
3 import os | |
4 import sys | |
5 | |
6 def _measure_time(func, repeat=100): | |
7 times = [] | |
8 for i in range(repeat): | |
9 start = datetime.now() | |
10 sys.stdout.write('.') | |
11 sys.stdout.flush() | |
12 func() | |
13 times.append(datetime.now() - start) | |
14 | |
15 print | |
16 total_ms = sum([t.seconds * 1000 + t.microseconds for t in times]) | |
17 print ' --> timing: %s (avg), %s (min), %s (max)' % ( | |
18 timedelta(microseconds=total_ms / len(times)), | |
19 timedelta(microseconds=min([t.seconds * 1000 + t.microseconds for t in times])), | |
20 timedelta(microseconds=max([t.seconds * 1000 + t.microseconds for t in times]))) | |
21 | |
22 def markup(dirname): | |
23 from markup.template import Context, TemplateLoader | |
24 loader = TemplateLoader([dirname], False) | |
25 template = loader.load('template.html') | |
26 def render(): | |
27 ctxt = Context(title='Just a test', | |
28 items=['Number %d' % num for num in range(1, 15)]) | |
29 template.generate(ctxt).render('html') | |
30 return render | |
31 | |
32 def cheetah(dirname): | |
33 # FIXME: infinite recursion somewhere... WTF? | |
34 from Cheetah.Template import Template | |
35 class MyTemplate(Template): | |
36 def serverSidePath(self, path): return os.path.join(dirname, path) | |
37 filename = os.path.join(dirname, 'template.tmpl') | |
38 template = MyTemplate(file=filename) | |
39 | |
40 def render(): | |
41 template = MyTemplate(file=filename, | |
42 searchList=[{'title': 'Just a test', | |
43 'items': [u'Number %d' % num for num in range(1, 15)]}]) | |
44 template.respond() | |
45 return render | |
46 | |
47 def clearsilver(dirname): | |
48 import neo_cgi | |
49 neo_cgi.update() | |
50 import neo_util | |
51 import neo_cs | |
52 def render(): | |
53 hdf = neo_util.HDF() | |
54 hdf.setValue('hdf.loadpaths.0', dirname) | |
55 hdf.setValue('title', escape('Just a test')) | |
56 for num in range(1, 15): | |
57 hdf.setValue('items.%d' % (num - 1), escape('Number %d' % num)) | |
58 cs = neo_cs.CS(hdf) | |
59 cs.parseFile('template.cs') | |
60 return render | |
61 | |
62 def kid(dirname): | |
63 import kid | |
64 kid.path = kid.TemplatePath([dirname]) | |
65 template = kid.Template(file='template.kid') | |
66 def render(): | |
67 template = kid.Template(file='template.kid', | |
68 title='Just a test', | |
69 items=['Number %d' % num for num in range(1, 15)]) | |
70 template.serialize(output='xhtml') | |
71 return render | |
72 | |
73 def main(): | |
74 basepath = os.path.abspath(os.path.dirname(__file__)) | |
75 for engine in ('markup', 'clearsilver', 'kid'): | |
76 dirname = os.path.join(basepath, engine) | |
77 print '%s:' % engine.capitalize() | |
78 func = globals()[engine](dirname) | |
79 _measure_time(func) | |
80 print | |
81 | |
82 if __name__ == '__main__': | |
83 main() |