这实际上是一个非常有趣的问题,因为它暴露了一些有趣的设计决策。
我更喜欢渲染部分模板,因为它使我的应用程序能够随时间变化。如果我需要使用图表从<table>
更改为<div>
,可以很容易地将其封装在模板中。考虑到这一点,我几乎将每个页面视为许多小模板的集合,这些小模板可能会发生变化。 Grails 2.0的默认脚手架已经转向这种类型的方法,这是一个好主意。
问题是它们应该是客户端模板还是服务器端是问题的关键。
服务器端模板使初始页面加载时标记更清晰。即使你使用类似的ICanHazJS,你也有点儿需要在页面中有一个空的元素(与你的模板有关),适当地设计它,然后在Javascript中使用它来更新你的信息。
缺点
通过线路
- “健谈的” 应用
- 较大信封(应答包括HTML,其可被认为是静态的)
- 较慢UI响应时间
优点
- 好fo r有很多服务器端语言体验的人
- 也许更容易在服务器端环境中进行操作或修改(例如,返回嵌有多个模板,这是程序加载并包含一个网页)
- 保留了大部分应用的东西“在一个地方”
客户端模板可以真正降低服务器负载,但是。他们使应用程序“less-chatty”,因为你可以通过发送更大的JSON集合(以相同的字节数或更少的数量,将被HTML占用一个服务器端模板方案)。他们还为用户提供真正快速的UI体验,因为点击“更新”链接无需进行AJAX往返。有人说:
安东尼·艾登@aeden 12月10日回复转推收藏·打开 Web应用的未来:请求由函数处理,逻辑始终是异步的,HTML是从来没有在服务器上生成。
缺点
- 没有伟大的搜索引擎优化(在初始页面加载未语义无关的UI元素)
- 需要一些JavaScript富(操纵元素)
优势 - 响应 - 较小的信封
趋势s似乎正在转向客户端模板,尤其是随着HTML5新增功能(如<canvas>
)所暴露的威力......但如果利用它们,则需要您依赖您不太熟悉的技术,并且您对Grails感到更加舒适部分,可能值得从这些开始,然后根据性能和其他问题调查对客户端模板的重构。
我想你已经在用户与页面的第一次联系时呈现类似的内容,就像你打算使用“加载更多链接”一样。在以相同的方式点击“加载更多”之后加载正在加载的内容并重新使用已经为此编写的代码是否没有意义?你的问题很有趣,我想看看你的想法和其他人的想法是什么 – jcage 2011-12-17 18:53:47
是的,在第一次互动时,我重新使用相同的模板(点2)来渲染整个页面(与其他页面的静态部分)。这两个选项都适用于我,我已经将它们用于分散的事情。我也很想看到其他人的想法。 – omarello 2011-12-17 19:15:27