首页 > 解决方案 > 通过 PHP 或 Javascript 构建 HTML 页面?服务器端与客户端

问题描述

Helo,所以我有一个生成 PHP 对象的 Web 服务器,并且我根据该对象构建网页(我有一个 HTML 构建器,字面意思echo是命令)并且它运行良好,因为我使用的是 OOP,所以我很容易维护我的代码.

我了解负载方面,它是服务器端和客户端负载之间的选择,目前这不是问题。如果我错了,请纠正我,如果你有任何想法,请告诉我你的想法。

我还有一个 JS 代码来处理 PHP 构建的 HTML 页面,我现在可以识别两种类型的页面,其中一种让我有点困惑:

被动网页

它只能显示数据,不向服务器发送反馈。这些网页可以通过 PHP 或 Javascript 完成,我看不出有什么区别。

活动网页

此类型适用于从服务器发送和接收(AJAX 和其他)请求的页面。现在我有两个无法决定的选择:

构建一个 PHP 对象,并将其传递给 JS 以构建 HTML。

在这种情况下,JS 应该知道完整的对象,并且可以轻松地对其进行操作并进行反馈。但是,这将使 JS 和 PHP 都理解该对象,这意味着该领域的工作加倍。
在这种情况下,交换更新应该是膨胀的。

完全使用 PHP 构建 HTML

此选项要求 JS 了解对象的少数部分,而不是全部部分(需要更新的部分)。这需要更少的 JS 工作,因为它推迟了未来可能的工作(即需要更新的对象的每个新部分都应该被理解为 JS)。


现在,我有点确定第二个选项更好,但第一个选项现在更快(因为我希望尽快有一个有效的 DEMO)。同时,我也不是很确定,我不想太深入,以至于以后改变主意变得更加困难。你怎么看?

如果这还不够清楚,我将举例说明。


PHP

Class A {
  protected $_name;
  protected $_id;

  function Update( $aInstance ) {
    // Give it an object, and it updates it. In case JS exchanges the whole object
  }
  function UpdateName( $newName ) {
    // Updates the name only. Used in case JS updates parts of the object.
  }
  // Other setters, too.
  function Draw() {
    // Either returns the object as JSON or echos the HTML code.
  }
}
class B inherits {
  protected $_age;
  function Update( $bInstance ) {
    paret::Update( $bInstance );
    // Update yourself, too.
  }
  // Other setters, too
  function Draw() {
    // Special draw, call parent's, or add to it
  }
}

JS 第一个选项

var object;
function Draw( object ) {
  // Handle all parts of the object.
}
function UpdateName() {
  // Whatever happens when the name changes.
}

JS 第二个选项

var header;
function DrawHeader() {
  // Display the header somehow
}
var DrawName() {
  // Display the name somehow
}
function UpdateName() {
  // Whatever happens when the name changes.
}

标签: server-sideclient-sidesoftware-designserver-side-rendering

解决方案


据我了解,问题是关于在客户端(JS)与服务器端(PHP)上处理 HTML 生成。在几乎所有现代 Web 应用程序中,HTML 部分现在都在客户端处理。HTML 是通过提供静态 HTML 文件或通过基于 JS 的 UI 框架(如 Angular/React 或两者的组合)生成的。使用服务器端代码生成 HTML 的想法现在已经过时了,并且有非常正当的理由。请阅读关注点分离和 MVC(模型视图控制器)架构。简单来说,以下是服务器端代码在大多数情况下不应该处理 HTML 的原因:

1) 最大的原因:将用户界面代码与服务器端代码分开。如果 UI 是使用服务器端代码生成的,那么它不允许您将来更改服务器端框架。在这个例子中,假设它需要使用 Java、Go 或 Scala 来代替 PHP,那么 HTML 生成逻辑也必须被移动或重写。但是,如果您的 JS 代码通过 JSON 处理所有数据,那么 PHP 代码可以很容易地用另一种语言替换,同时保持 JSON 格式与以前相同。

2) 如果 HTML 代码是通过服务器端代码生成的,则 HTML 代码中的任何更改都需要重新编译、重建和重新部署服务器端代码。但是,如果它保留在客户端,则不需要重新编译。

3)HTML和UI是前端工程的一部分,而服务器端是后端工程。因此,如果 HTML 代码是在服务器端编写的,那么前端和后端工程师就很难协作处理同一个文件,我们绝对不希望出现这种情况。

4) 有更好的工具可用于在客户端而不是服务器端运行的 HTML 设计和操作。

5) 如果 HTML 生成发生在服务器端,生成 HTML 的相同代码会为每个请求一遍又一遍地执行。这是对资源的浪费。相反,如果 HTML 生成发生在客户端,浏览器(JS 代码)将不得不执行 HTML 生成,这显着减少了服务器端的负载。

除了我如何设法解释之外,还有许多其他原因得到了很好的解释。简而言之,PHP 端的 HTML 生成根本不是一个好主意。希望有帮助!


推荐阅读