第一版没怎么考虑性能,谢谢建议,都是很好的改进意见。
On Friday, May 10, 2013 2:34:36 AM UTC+8, agentzh wrote:
Hello!
2013/5/9 Dai Jun:
> 之前用openresty做web api。 内部一些工具web系统也想用它来做,不过比Django麻烦少很多东西,其中就少了个模板系统,
> 于是随手做了一个 ^_^, 有需要的童鞋可以用用
> https://github.com/daly88/lutem
>
多谢贡献 :)
在性能优化方面我有下面两个小建议:
1. 对于模版系统而言,应尽量使用 lua table + table.concat 来进行拼串操作,而不是使用 .. 来不断创建新的
Lua 字符串,比如你的代码中的下面这几行:
self.output_ = self.output_ .. node.content
self.output_ = self.output_ .. self:get_expr_val(node.content)
self.output_ = self.output_ .. node.content
Lua 字符串被设计为 immutable 的,所以每次创建新字符串的开销比较大,累积起来就很可观了。
2. 另外,模版一般是相对固定的,所以如果能把模版直接编译为一个 Lua 函数,然后每次渲染时都直接调用此函数应当最为高效(例如 Lua 的
ltp 模版库就使用了类似的模式),即实现为模版编译器,而非模版解释器 :)
仅供参考 :)
Best regards,
-agentzh