我一直想知道如何選擇使用服務器端代碼還是客戶端代碼來構建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>
使用客戶端的代碼,我得到的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>
所有我需要在服務器上的數據轉儲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);
?>
這是一個非常簡單的例子,但回回在這裏,我看到了不同領域的優點和缺點。
1 - 服務器端解決方案的優點是能夠隱藏大部分實際編程邏輯背後的所有內容。當用戶查看頁面源代碼時,他們看到的只是已經建好的網頁。換句話說,客戶端解決方案將您所有的源代碼和編程邏輯放在瞭如何構建特定的東西上。但是你可以使用縮小器來讓你的源看起來更加神祕。
2 - 客戶端解決方案將「資源負載」轉移到客戶端系統上(即瀏覽器需要使用客戶端的計算機資源來構建大部分頁面),而服務器端解決方案則陷入困境,服務器。
3 - 當涉及到可維護性和可讀性時,客戶端解決方案可能更優雅。但是,再次,我可以使用PHP庫來模塊化HTML控件,並使其更具可讀性。
有何評論?提前致謝。
實際上,Google正在爲JS內容編制索引方面邁出了重要的一步。例如,請參閱http://googlewebmastercentral.blogspot.com/2007/11/spiders-view-of-web-20.html – nico 2010-12-01 18:53:27