在服务器上渲染部分视图或在客户端上发送json数据和渲染模板

oma*_*llo 6 html javascript grails view-templates

我想知道在Web应用程序中渲染部分视图的好方法(或推荐方法).

我有一个要求,我需要使用AJAX将数据加载到已经呈现的页面中,有点像页面末尾的"加载更多..."链接,它从服务器获取更多信息并将其呈现到底部这页纸.

我正在玩AJAX响应的两个选项是

  1. 返回数据的JSON表示,并使用客户端模板库(例如jQuery模板)或只是简单的javascript将JSON转换为HTML并附加到页面底部
  2. 渲染服务器上的局部视图(在我的例子中使用grails' render template:'tmplt_name')并通过网络发送它,然后将结果附加到页面底部

还有其他方法吗?如果没有,鉴于上述选项在维护,性能和可测试性方面会更好?我确定的一件事是,JSON路由(在大多数情况下)比使用线路发送html消耗更少的带宽.

Vis*_*ons 2

这实际上是一个非常有趣的问题,因为它揭示了一些有趣的设计决策。

\n\n

我更喜欢渲染部分模板,因为它使我的应用程序能够随时间变化。如果我需要将图表从 a 更改<table>为 a <div>,很容易将其封装在模板中。考虑到这一点,我将几乎每个页面视为许多小模板的集合,这些模板可能会发生变化。Grails 2.0 默认脚手架已转向这种类型的方法,这是一个好主意。

\n\n

问题的关键在于它们应该是客户端模板还是服务器端模板。

\n\n

服务器端模板使您的标记在初始页面加载时保持清晰。即使您使用像ICanHazJSMustache这样的东西,您也需要在页面中有一个空元素(带有您的模板的东西),适当地设计它的样式,并在 Javascript 中使用它才能更新您的信息。

\n\n

缺点

\n\n
    \n
  • “健谈”的应用程序
  • \n
  • 网络上更大的信封(响应包括 HTML,可能被视为静态)
  • \n
  • 用户界面响应时间较慢
  • \n
\n\n

好处

\n\n
    \n
  • 适合具有丰富服务器端语言经验的人
  • \n
  • 在服务器端环境中可能更容易操作或修改(例如返回嵌入多个模板的页面,这些模板以编程方式加载和包含)
  • \n
  • 将大部分应用程序内容保留在“一个地方”
  • \n
\n\n

然而,客户端模板确实可以减少服务器负载。它们使应用程序“不那么啰嗦”,因为您可以通过发送回更大的 JSON 集合(以与 HTML 中的 HTML 占用的字节数相同或更少的字节数)来最大限度地减少对服务器的回调次数。服务器端模板方案)。它们还使用户的 UI 体验非常快,因为单击“更新”链接不必进行 AJAX 往返。有人说:

\n\n
\n

Anthony Eden @aeden 12 月 10 日回复转发收藏 \xc2\xb7 打开\n Web 应用程序的未来:请求由函数处理,逻辑始终异步,并且永远不会在服务器上生成 HTML。

\n
\n\n

缺点

\n\n
    \n
  • 不太适合 SEO(初始页面加载时出现非语义无关的 UI 元素)
  • \n
  • 需要一些 Javascript foo (来操作元素)
  • \n
\n\n

优点\n - 响应灵敏\n - 信封更小

\n\n

趋势似乎正在向客户端模板发展,尤其是 HTML5 添加的功能(例如<canvas>)...但是如果利用它们需要您依赖您不太熟悉的技术,并且您对 Grails 感觉更舒服部分,可能值得从这些开始,然后根据性能和其他问题研究对客户端模板的重构。

\n