构建 HTML 客户端 VS 服务 HTML 服务器端?

Building HTML client-side VS serving HTML server-side?

我总是很难决定我应该在 HTML 服务器端渲染还是在客户端构建它。

假设我想呈现具有以下要求的动态 HTML 下拉菜单:

我无法决定

选项 1

  1. 在服务器端呈现带有空下拉列表的模板
  2. 使用 ajax 请求 (JSON)
  3. 在客户端填充下拉列表
  4. 使用 ajax 请求更新下拉客户端 (JSON)

关注点:在填充之前渲染空元素对我来说很难看

选项 2

  1. 在服务器端呈现填充的下拉列表
  2. 使用 ajax 请求更新下拉客户端 (JSON)

问题:如果您仍在更新客户端,为什么还要渲染服务器端?

Web开发中比较常用的方案是什么?欢迎分享不同的方法。

这取决于。您还在为 SEO 烦恼吗?

您是否在使用任何类型的客户端框架?我会假设你不知道,因为 JavaScript 框架有自己的方法来做到这一点,如果你愿意,你可以阅读更多关于 angular/react/vuejs 的信息,这是那些日子里最热门的 JavaScript 框架将解决这个问题。

客户端框架仅在客户端呈现 HTML,并且仅使用 Ajax API 从服务器接收数据。

但是,如果您不想使用任何客户端框架并以 "classic" 方式使用,那么两种方式都值得赞赏。我倾向于喜欢第一种方式,这几乎就是客户端框架的工作方式并且最有意义,是的,你渲染空 table 但你只渲染数据的 "container",如果你'如果您对它的外观感到困扰(在获取数据之前显示空列表),您可以只显示加载栏或隐藏 table 直到获取数据。

你的担心是有道理的,正如你所说,每种情况都有其优点和缺点。

我个人会选择第一种方法(所有客户端);主要是为了代码的可维护性。使用这种方法,您只需更新 HTML 客户端,而不是同时更新客户端和服务器端。

但是,对于通过服务器端呈现值来保存该请求,有一个论点。尽管它可能微不足道,但还是有一个小的性能优化。

这是一点意见基础。服务器端有学校,客户端有其他学校。后者的主要原因是利用客户端机器(对您免费)来释放服务器资源(您付费)。这也使您的应用程序更具可扩展性。

你举的例子不够详细,只是一方面。我通常使用这些通用规则:

如果您的页面有动态部分(例如下拉菜单、网格、弹出窗体等),我会使用 Ajax 来避免重新加载整个页面。

如果HTML非常简单and/or需要在客户端进一步处理,那么只需从服务器发送JSON数据并构建HTML客户端。例如,我通常不会从服务器发送错误消息。相反,我只发送状态代码(例如 Successful、AccessDenied、Error 等),然后在客户端检查这些代码并显示相关消息。当不同的消息以不同的颜色和样式显示或包含其他 HTML 标签(如链接)时,这特别有用。

如果它是一个复杂的弹出表单或数据网格,那么我会从服务器发送 HTML。在服务器上构建复杂的 HTML 通常更容易和更灵活。此外,当有用于构建 HTML 的敏感信息时,在服务器上构建它通常要容易得多,否则您将不得不从服务器发送一些标志,或者更好的是,您需要拆分您的 HTML 根据权限将流程构建到各个部分。

至于你问题中那个非常具体的例子,我会选择第一种方法(所有客户端),主要是为了 DRY 概念(不要重复自己)。您不希望有两段代码做完全相同的事情,并且必须记住每次需要更改时都更新。

不过请注意,如果您不喜欢,则不必发送空的下拉列表。您实际上可以每次都重建整个下拉列表,而不是像您的示例所建议的那样只更新选项。我不是特别喜欢这种方法,尤其是在下拉列表中附加了事件侦听器和其他引用的情况下,但我只想说说其他方法。此方法在某些情况下可能很有用,特别是如果下拉列表是页面较大部分的一部分,而整个部分每次都需要更新(重建),在这种情况下,我通常选择从发送 HTML服务器。