如何用Python构建高速的模版引擎

这是由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)

速度比较结果

/static/upload/1379685783.jpg

结论

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 转摘请注明来源

Suggested Topics

在 Ubuntu 16.04.6 LTS 系统上安装 Python 3.6.3

自己的阿里云一个 VPS 用的是系统 Ubuntu 16.04.6 LTS,自带的python版本是 `2.7.12` 与 `3.5.2`,有时候要用到 python `3.6`,又不想卸掉原来版本。下面介绍安装 python 3.6.3 的过程,因为版本较旧,遇到一些坑,这里记录一下。...

python 半角全角的相互转换

全角与半角在中文输入法里经常要接触到,后台在处理用户输入数据时需要对半角全角的相互转换。下面是python 实现的半角全角的相互转换功能。...

golang 缓存模版的方法

这是官方使用的方法,实例初始化时把所有模版渲染后缓存到 templates,后续使用ExecuteTemplate 方法来使用特定的模版...

python 对中文链接安全转码

当一个链接里包含中文时,有些浏览器并不能正确解析,这就需要首先对中文作安全转码,这里介绍用 python 对中文链接安全转码,...

Leave a Comment