有没有人通过在 GAE/App Engine 中使用更快的模板引擎获得实际收益?
Posted
技术标签:
【中文标题】有没有人通过在 GAE/App Engine 中使用更快的模板引擎获得实际收益?【英文标题】:Has anyone made actual gains by using a faster templating engine in GAE/ App Engine? 【发布时间】:2011-10-21 09:42:06 【问题描述】:我对 pyTenjin 的性能非常感兴趣 - http://www.kuwata-lab.com/tenjin/ 它绝对胜过其他模板引擎 - mako、jinja2 等。但同时也带来了学习一个有点丑陋的模板系统的成本。我个人喜欢 jinja2 / django 风格的模板。
我喜欢 pyTenjin 可以在一定程度上降低 CPU 使用率的想法 - http://www.kuwata-lab.com/tenjin/pytenjin-faq.html#faq-google-appengine
我正在考虑使用 pyTenjin a) 在我的客户网站上的 iframe 中构建视图,或者 b) 使用它根据配置生成动态 javascript
性能似乎是一个不错的加分项。不利的是,我们有一点时间来学习 pyTenjin 和一些丑陋的妥协。我可以坚持使用 jinja2 并将注意力转移到开发速度而不是 ops/s 上
但我想知道 CPU 使用率的降低是否显着。我身边没有太多负载很重的应用引擎示例,我不得不问,到目前为止,有没有人通过更改他们的模板系统在 CPU 使用方面获得任何收益?
【问题讨论】:
为什么不检测您的应用程序来计算模板渲染调用需要多长时间?然后,您可以轻松确定可以节省多少时间的上限。 感谢 Nick 的建议,我做了进一步的研究,发现在 10 年完成的一系列基准测试untilnil.com/2010/08/appenginetemplate Mako 和 Jinja 在上一个基准测试中似乎比 Tenjin 做得更好untilnil.com/2010/08/appenginetemplate4 这些基准测试很有用,但不会告诉您它会对您的应用产生多大的实际影响 - 只有检测才能做到这一点。 【参考方案1】:Mako 的速度非常快。但是如果你使用compiled templates,Jinja2 可以同样快。它们被编译成 Python 代码,并且有一个加载器来使用它们。
我建议您在开发时设置条件以在生产和正常渲染中使用已编译的模板。另外,在生产中设置auto_reload=False
时instantiating the Environment,因为您的模板在生产中永远不会改变。当然,尽可能缓存渲染的输出。
除非您要渲染巨大的模板,否则我不明白为什么您应该花时间迁移到与传统 Mako/Django/Jinja2 不同的模板系统。
【讨论】:
以上是关于有没有人通过在 GAE/App Engine 中使用更快的模板引擎获得实际收益?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Flask-Restless 进行 GAE app.yaml 路由