我该在可能高流量网站中使用haml、erb还是erubis?

47

最近我一直在使用Haml,并且非常喜欢看起来很简洁的代码...作为一名开发人员,我也不太担心设计师能否使用或更改它...我们是一个小团队。

话虽如此,我们开始着手一个项目,相信将会产生相当大的流量(谁不想呢?)。我担心有关Haml的某些问题我还不知道。erb能做到的事情,haml能做吗?随着项目的发展,haml会对其产生负面影响吗?还有其他需要考虑的事情吗?

最后...... Haml与erubis在速度上有何比较? 我看到它现在据说击败了erb和eruby...

谢谢!


就我个人而言,只有在可扩展性成为问题时才会担心它。 毕竟,与视图渲染相比,数据库需要花费更多的时间。(至少就我所见) - Robert K
3
相反,如果你只关心何时出现问题,那么如果你决定你的模板语言太慢了,而你又被卡在使用该语言编写的大量视图中,你该怎么办? - outcassed
Casey说得好 - 模板是Web应用程序中最难转换的部分。 - thethinman
7个回答

45

Haml非常出色。我没有看到任何最新的性能数据,但是现在它与erb相比几乎不相上下。如果你打开丑陋模式(这会防止漂亮的缩进),我认为它可能比erb更快。我们每天使用Haml处理280万个页面。

在Haml源代码树中有一个基准测试器: http://github.com/nex3/haml/tree/master/test

更新于2009年11月

Nathan(Haml的主要开发者)在他的博客上发布了一些Haml 2.2基准测试数据。您可以在那里查看具体数字,但简而言之:

  • 正常模式(美观的打印输出)= 比ERB慢2.8倍
  • 丑模式(不添加美观的缩进)= 与ERB相等

您可以通过在初始化程序或环境文件中放置Haml :: Template :: options [:ugly] = true 来启用丑陋模式。请注意,丑陋模式并不是真正丑陋的 - 生成的HTML实际上比ERB更漂亮 - 只是没有漂亮的缩进。


1
你的数字和提供的基准测试结果相当令人印象深刻。知道“丑陋模式”也很不错 :) - Dzung Nguyen
11
在初始化器中设置“丑陋模式”并不是必需的,因为HAML默认情况下在生产环境中启用了这个模式。 - Voldy

27
如果您使用Rails,Haml和erubis之间的性能差异微不足道:无论如何,在第一次访问后,模板都会被编译和缓存。结合片段和页面缓存,您可以放心地认为视图不是应用程序的性能瓶颈。
您应该问自己的问题是:你喜欢写Haml吗?它是否使你更有生产力?然后你可以更容易地做出决定。

11

我喜欢HAML,因为它是一个很好的工具,可以轻松地编写结构化的HTML代码,并且通常使用起来非常愉快。但这与根据网站流量选择工具几乎没有任何关系。

如果您担心网站流量,您应该担心如何正确地使用缓存。然后,您需要应用一般网络应用程序性能原理 - 结果是您将获得超快的页面加载响应速度。这正是高流量网站所需要的。

下面列出了两个有关如何提高网站性能的演示文稿:

我所知道的学习如何正确使用Rails缓存的最佳方法是:


4

我认为这完全是个人偏好和可维护性的问题。对我来说,Haml 使模板更易于阅读和理解,并且性能非常可接受。最终,模板语言不太可能是需要优化的地方--更有可能是数据库查询、视图或对象缓存等。

然而,在使用 ERb 模板的情况下,如果您使用 erubis,您将免费获得更好的性能。


2
如果你喜欢haml的编码方式,就不要太担心模板引擎的性能问题。(尽管,正如你指出的那样,它现在已经很快了。)它肯定可以生成其他引擎所能生成的任何输出。
通常情况下,在出现性能问题时,将精力投入到设置缓存中,比担心模板引擎更有利可图。

1

如果没有动态模板的需求,我个人会推荐使用预编译模板 erubis。

这样你的最大瓶颈将受到 Ruby 解析速度的限制。

我可能会设置一个小型 cron 作业,仅监视更改的源模板并在更改时自动编译它们,不使用时可以关闭。

编译一次,多次使用。

哦,如果你真的很关心速度,Tenjin 也值得一看(与 erubis 的创建者相同)。

http://www.kuwata-lab.com/tenjin/rbtenjin-examples.html


你知道如何让Rails 3使用Tenjin吗? - Green

0

好的,每次发布 Haml 性能都在不断提高。目前的表现是否令人满意?这取决于您(我倾向于说“是”,但您应该根据自己的需求做出选择)。如果您喜欢模板和它们所提供的可读性,则性能下降(无论多么微不足道)实际上应该是您决策的最终因素。

除了使用 Haml,您还应该考虑与之配合使用的另一种工具:make_resourceful,这是由 Haml 的维护者 Nathan Weizenbaum 开发的另一个 gem,可以简化 Rails 应用程序中的许多 RESTful 事项。

如果您有关于 Haml(和 m_r)的更多具体问题,我相信 Nathan 很乐意回答。您可以通过 Jabber/XMPP 和电子邮件联系他。他的联系信息可以在 这里 找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接