哪个更好:在服务器上或在JS客户端上的HTML渲染?

问题描述:

我有一个最佳实践/性能问题。我正在创建一个ASP.NET MVC 2项目,并且我有几个可以在加载时或用户交互时动态访问的页面部分。哪个更好:在服务器上或在JS客户端上的HTML渲染?

我的问题是这样的:最好让服务器上的HTML呈现部分,然后只是替换HTML的部分,或者更好地检索信息作为JSON对象,然后使用JS来创建和插入HTML?

应该指出,关注的对象本质上非常简单。一个例子是具有ID字段,to字段,from字段,subject字段和body字段的'message'对象,它们都是字符串。

这两种方法都有一些严重的优缺点吗?或者,这是如何构建您的应用程序的优先事项?

我不认为要么更好;这将取决于你的要求。这个问题是无法回避的。你是否使用客户端上的数据进行进一步的计算或操作,或者你只是想要显示一些东西?

在你输出的文本数据,但它恰好是更容易更直接表示数据结构JSON比它的数据结构转换为HTML和它更容易直接显示HTML比JSON两种情况。

+0

这仅用于显示。无论如何,这些信息都将用HTML封装;问题仅仅是在服务器上创建HTML并将其发送下来或更好地将信息发送为JSON并随即创建HTML元素更好。 – Dave 2010-12-03 19:39:55

正如Jonathon已经说过的,我不认为你的问题有一个简单的是/否的答案。

尚未已经提到的唯一因素就是服务器端执行的可预测性,而客户端执行的是你的控制,并可以根据浏览器的不同而不同。这实际上可能不是内联网站点的一个因素,但如果观众多样化,这可能变得重要。现代的Javascript库通常(并不总是)阻止我们摆脱浏览器怪癖,但是旧版浏览器也可能有特定的性能问题(虽然性能实际上不应该成为您的主要标准,除非您尝试了它并且它很可怕)。

选择您认为最舒适的实施解决方案可能是最好的选择。

许多框架的渲染库(模型 - 视图 - 控制器体系结构的视图部分)相对较慢。原因是渲染库需要解析/执行视图域特定语言来替换变量等。

根据您的应用程序的规模,让客户端的浏览器执行渲染可能会快得多。但将View计算移动到客户端可能难以以一致的方式进行。

谷歌的Closure compiler包括一个模板库。另一种选择是液体。它有一个Javascript,.NetRuby的实现。

考虑以下问题:

  1. 会不会有具有客户端上的原始数据的任何好处?在某些情况下,页面的其他部分使用数据。在这些情况下,通过电线发送数据可能更有意义。

  2. 是否存在潜在的性能差异?考虑总管道。发送HTML可以是冗长的,但在服务器上渲染速度更快?呈现的HTML能否缓存在服务器上?

如果这两种方法都不能促使你朝某个方向或另一方向移动,那么我会选择更易维护的代码库。这不仅取决于具体问题,还取决于团队的技能。

鲍勃