Mercurial > genshi > mirror
annotate examples/bench/run.py @ 92:01d36818bb3d trunk
More performance improvements... this time for whitespace normalization and template loops.
author | cmlenz |
---|---|
date | Thu, 20 Jul 2006 23:06:36 +0000 |
parents | d60486018004 |
children |
rev | line source |
---|---|
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
1 from cgi import escape |
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
2 import os |
79 | 3 from StringIO import StringIO |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
4 import sys |
69 | 5 import timeit |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
6 |
80 | 7 __all__ = ['clearsilver', 'django', 'kid', 'markup', 'simpletal'] |
76 | 8 |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
9 def markup(dirname, verbose=False): |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
10 from markup.template import Context, TemplateLoader |
69 | 11 loader = TemplateLoader([dirname], auto_reload=False) |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
12 template = loader.load('template.html') |
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
13 def render(): |
76 | 14 ctxt = Context(title='Just a test', user='joe', |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
15 items=['Number %d' % num for num in range(1, 15)]) |
76 | 16 return template.generate(ctxt).render('html') |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
17 |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
18 if verbose: |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
19 print render() |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
20 return render |
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
21 |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
22 def cheetah(dirname, verbose=False): |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
23 # FIXME: infinite recursion somewhere... WTF? |
76 | 24 from Cheetah.Template import Template |
25 class MyTemplate(Template): | |
26 def serverSidePath(self, path): return os.path.join(dirname, path) | |
27 filename = os.path.join(dirname, 'template.tmpl') | |
28 template = MyTemplate(file=filename) | |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
29 |
76 | 30 def render(): |
31 template = MyTemplate(file=filename, | |
32 searchList=[{'title': 'Just a test', 'user': 'joe', | |
33 'items': [u'Number %d' % num for num in range(1, 15)]}]) | |
34 return template.respond() | |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
35 |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
36 if verbose: |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
37 print render() |
76 | 38 return render |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
39 |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
40 def clearsilver(dirname, verbose=False): |
76 | 41 import neo_cgi |
42 neo_cgi.update() | |
43 import neo_util | |
44 import neo_cs | |
45 def render(): | |
46 hdf = neo_util.HDF() | |
47 hdf.setValue('hdf.loadpaths.0', dirname) | |
48 hdf.setValue('title', escape('Just a test')) | |
49 hdf.setValue('user', escape('joe')) | |
50 for num in range(1, 15): | |
51 hdf.setValue('items.%d' % (num - 1), escape('Number %d' % num)) | |
52 cs = neo_cs.CS(hdf) | |
53 cs.parseFile('template.cs') | |
54 return cs.render() | |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
55 |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
56 if verbose: |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
57 print render() |
76 | 58 return render |
59 | |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
60 def django(dirname, verbose=False): |
76 | 61 from django.conf import settings |
62 settings.configure(TEMPLATE_DIRS=[os.path.join(dirname, 'templates')]) | |
63 from django import template, templatetags | |
64 from django.template import loader | |
65 templatetags.__path__.append(os.path.join(dirname, 'templatetags')) | |
66 tmpl = loader.get_template('template.html') | |
67 | |
68 def render(): | |
69 data = {'title': 'Just a test', 'user': 'joe', | |
70 'items': ['Number %d' % num for num in range(1, 15)]} | |
71 return tmpl.render(template.Context(data)) | |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
72 |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
73 if verbose: |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
74 print render() |
76 | 75 return render |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
76 |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
77 def kid(dirname, verbose=False): |
76 | 78 import kid |
79 kid.path = kid.TemplatePath([dirname]) | |
80 template = kid.Template(file='template.kid') | |
81 def render(): | |
82 template = kid.Template(file='template.kid', | |
83 title='Just a test', user='joe', | |
84 items=['Number %d' % num for num in range(1, 15)]) | |
85 return template.serialize(output='xhtml') | |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
86 |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
87 if verbose: |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
88 print render() |
76 | 89 return render |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
90 |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
91 def nevow(dirname, verbose=False): |
61 | 92 # FIXME: can't figure out the API |
76 | 93 from nevow.loaders import xmlfile |
94 template = xmlfile('template.xml', templateDir=dirname).load() | |
95 def render(): | |
96 print template | |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
97 |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
98 if verbose: |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
99 print render() |
76 | 100 return render |
61 | 101 |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
102 def simpletal(dirname, verbose=False): |
79 | 103 from simpletal import simpleTAL, simpleTALES |
104 fileobj = open(os.path.join(dirname, 'base.html')) | |
105 base = simpleTAL.compileHTMLTemplate(fileobj) | |
106 fileobj.close() | |
107 fileobj = open(os.path.join(dirname, 'template.html')) | |
108 template = simpleTAL.compileHTMLTemplate(fileobj) | |
109 fileobj.close() | |
110 def render(): | |
111 ctxt = simpleTALES.Context() | |
112 ctxt.addGlobal('base', base) | |
113 ctxt.addGlobal('title', 'Just a test') | |
114 ctxt.addGlobal('user', 'joe') | |
115 ctxt.addGlobal('items', ['Number %d' % num for num in range(1, 15)]) | |
116 buf = StringIO() | |
117 template.expand(ctxt, buf) | |
118 return buf.getvalue() | |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
119 |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
120 if verbose: |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
121 print render() |
79 | 122 return render |
123 | |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
124 def run(engines, verbose=False): |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
125 basepath = os.path.abspath(os.path.dirname(__file__)) |
69 | 126 for engine in engines: |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
127 dirname = os.path.join(basepath, engine) |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
128 if verbose: |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
129 print '%s:' % engine.capitalize() |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
130 print '--------------------------------------------------------' |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
131 else: |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
132 print '%s:' % engine.capitalize(), |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
133 t = timeit.Timer(setup='from __main__ import %s; render = %s("%s", %s)' |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
134 % (engine, engine, dirname, verbose), |
69 | 135 stmt='render()') |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
136 time = t.timeit(number=2000) / 2000 |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
137 if verbose: |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
138 print '--------------------------------------------------------' |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
139 print '%.2f ms' % (1000 * time) |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
140 if verbose: |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
141 print '--------------------------------------------------------' |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
142 |
76 | 143 |
57
300b6a3b0730
Add some simple benchmarks to compare performance against Clearsilver, Kid, Cheetah, and more soon.
cmlenz
parents:
diff
changeset
|
144 if __name__ == '__main__': |
69 | 145 engines = [arg for arg in sys.argv[1:] if arg[0] != '-'] |
76 | 146 if not engines: |
147 engines = __all__ | |
69 | 148 |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
149 verbose = '-v' in sys.argv |
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
150 |
69 | 151 if '-p' in sys.argv: |
152 import hotshot, hotshot.stats | |
153 prof = hotshot.Profile("template.prof") | |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
154 benchtime = prof.runcall(run, engines, verbose=verbose) |
69 | 155 stats = hotshot.stats.load("template.prof") |
156 stats.strip_dirs() | |
157 stats.sort_stats('time', 'calls') | |
158 stats.print_stats() | |
159 else: | |
81
d60486018004
Template expressions are now compiled to Python bytecode.
cmlenz
parents:
80
diff
changeset
|
160 run(engines, verbose=verbose) |