这是由pyTenjin的作者介绍经验的一个slideshare,介绍如何用Python构建高速的模版引擎。其经验和方法很值得我们学习。
关于 Tenjin 模版
- Very fast One file, 2000 lines
- Full-featured
- Python 3 support
- Google App Engine
几个常见模板引擎的比较。
字符串连接方法速度比较
python 代码: append
1
2
3
4
5
_buf = []
_buf = append(s)
_buf = append(s)
_buf = append(s)
output = "".join(_buf)
python 代码: extend
1
2
3
_buf = []
_buf.extend((s,s,s, ))
output = "".join(_buf)
python 代码: StringIO
1
2
3
4
5
6
from cStringIO import StringIO
_buf = StringIO()
_buf.write(s)
_buf.write(s)
_buf.write(s)
output = _buf.getvalue()
python 代码: mmap
1
2
3
4
5
6
7
8
import mmap
_buf = mmap.mmap(-1, 2*1024*1024)
_buf.write(s)
_buf.write(s)
_buf.write(s)
length = _buf.tell()
_buf.seek(0)
output = _buf.resd(length)
python 代码: Generator
1
2
3
4
5
6
def _gen(s):
yield s
yield s
yield s
output = "".join(_gen(s))
python 代码: Slice
1
2
3
4
5
6
7
8
_buf = [""]
_buf[-1:] = (s, s, s, "")
output = "".join(_buf)
# or
_buf = []
_buf[999999:] = (s, s, s, )
output = "".join(_buf)
python 代码: Bound method
1
2
3
4
_buf = []
_extend = _buf.extend
_extend((s, s, s, ))
output = "".join(_buf)
速度比较结果
结论
快 bound method >= slice[] > extend()
慢 Generator > append() > mmap > StringIO 在字符串连接方面,extend join已经足够快了。
幻灯片地址 http://www.slideshare.net/kwatch/how-to-create-a-highspeed-template-engine-in-python
本文网址: https://pylist.com/topic/30.html 转摘请注明来源