在服务器端或客户端构建网页?

JoJ*_*Dad 5 php json server-side client-side

我一直想知道如何决定在使用服务器端代码与客户端代码之间进行选择来构建HTML页面.我将使用一个非常简单的php vs javascript/jquery示例来进一步解释我的问题.非常感谢您的建议和意见.

假设我要向用户提供一个网页,以便在我的网页中选择一种报告.哪个更有意义?

对于服务器端创建,我会这样做:

<div id="reportChoices">

<?php
// filename: reportScreen.php
// just for the sake of simplicity, say a database returns the following rows 
// that indicates the type of reports that are available:

$results = array(
    array("htmlID"=>"battingaverage", "htmlLabel"=>"Batting AVG report"),
    array("htmlID"=>"homeruntotals", "htmlLabel"=>"Home Run Totals report"),
);

foreach ($results AS $data)
    echo "<input type='radio' name='reportType' value='{$data['htmlID']}'/>{$data['htmlLabel']}";
?>

</div>
Run Code Online (Sandbox Code Playgroud)

使用客户端代码,我将获得javascript来构建如下所示的页面:

<!-- filename: reportScreen.html -->
<div id="reportChoices">
</div>

<!-- I could put this in the document.ready handler, of course -->
<script type="text/javascript">
$.getJSON("rt.php", {}, function(data) {
 var mainDiv = $("#reportChoices");
 $.each(data, function(idx, jsonData) {
  var newInput = $(document.createElement('input'));

  newInput
   .attr("type", "radio")
   .attr("name", "reportType")
   .attr("value", jsonData["htmlID"])

  mainDiv.append(newInput).append(jsonData["htmlLabel"]);
 });
};
</script>
Run Code Online (Sandbox Code Playgroud)

我在服务器上需要的只是一个数据转储php脚本,例如:

<?php
// filename: rt.php
// again, let's assume something like this was returned from the db regarding available report types

$results = array(
    array("htmlID"=>"battingaverage", "htmlLabel"=>"Batting AVG report"),
    array("htmlID"=>"homeruntotals", "htmlLabel"=>"Home Run Totals report"),
);

echo json_encode($results);
?>
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的例子,但从这一点来看,我看到了不同领域的利弊.

1 - 服务器端解决方案的优势在于能够隐藏大部分实际编程逻辑,而不是构建所有内容.当用户查看页面源时,他们看到的只是已经构建的网页.换句话说,客户端解决方案会提供有关某些内容构建方式的所有源代码和编程逻辑.但你可以使用缩小器使你的源看起来更神秘.

2 - 客户端解决方案将"资源负载"传输到客户端系统(即浏览器需要使用客户端的计算机资源来构建大部分页面),而服务器端解决方案则陷入困境,即服务器.

3 - 在可维护性和可读性方面,客户端解决方案可能更加优雅.但话说回来,我本可以使用php库来模块化HTML控件并使其更具可读性.

任何意见?提前致谢.

Fru*_*ner 3

缺点(客户端解决方案):客户端解决方案依赖于客户端正确执行代码。由于您无法控制哪个客户端系统将执行您的代码,因此很难确保它始终提供与服务器端解决方案相同的结果。

这个特殊问题似乎并不真正需要客户端解决方案,不是吗?我会坚持使用服务器端解决方案。唯一的额外工作是foreach一个循环echo,这并不是真正的资源繁重(除非您已经分析过它并且知道它是)?生成的代码都集中在一处并且更简单。