2010-12-01 8 views
5

Ich habe mich immer gefragt, wie ich entscheiden kann, ob ich serverseitigen Code oder clientseitigen Code zum Erstellen von HTML-Seiten verwenden möchte. Ich werde ein sehr einfaches PHP vs Javascript/Jquery Beispiel verwenden, um meine Frage weiter zu erklären. Ihr Rat und Kommentar wird sehr geschätzt.Erstellen von Webseiten auf der Serverseite oder der Clientseite?

Angenommen, ich möchte einem Benutzer eine Webseite präsentieren, um einen Berichtstyp auf meiner Webseite auszuwählen. Was macht mehr Sinn?

Für serverseitige Erstellung, ich dies tun würde:

<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> 

mit clientseitigen Code, würde ich das Javascript bekommen die Seite wie folgt aufzubauen:

<!-- 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> 

alles, was ich auf dem Server benötigen würde, ist eine pHP-Skript Datendump wie:

<?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); 
?> 

Dies ist ein sehr einfaches Beispiel, aber fro m dies sehe ich Vor- und Nachteile in verschiedenen Bereichen.

1 - Die serverseitige Lösung hat den Vorteil, dass sie die eigentliche Programmierlogik dahinter verbergen kann, wie alles aufgebaut ist. Wenn der Benutzer die Seitenquelle betrachtet, sehen sie nur die bereits erstellte Webseite. Mit anderen Worten, die clientseitige Lösung gibt Ihren gesamten Quellcode und Ihre Programmierlogik darüber preis, wie bestimmte Dinge gebaut werden. Aber Sie könnten einen Minifier verwenden, um Ihre Quelle kryptischer aussehen zu lassen.

2 - Die clientseitige Lösung überträgt die "Ressourcenlast" auf das Clientsystem (dh der Browser muss die Computerressourcen des Clients verwenden, um den größten Teil der Seite zu erstellen), während die serverseitige Lösung nicht funktioniert Server.

3 - Die Client-seitige Lösung ist wahrscheinlich eleganter, wenn es um Wartbarkeit und Lesbarkeit geht. Aber andererseits hätte ich PHP-Bibliotheken verwenden können, die HTML-Steuerelemente modularisieren und viel lesbarer machen.

Irgendwelche Kommentare? Danke im Voraus.

Antwort

3

Con (Client-Lösung): Die clientseitige Lösung benötigt den Client, um den Code ordnungsgemäß auszuführen. Da Sie keine Kontrolle darüber haben, welches Clientsystem Ihren Code ausführen wird, ist es viel schwieriger sicherzustellen, dass es die gleichen Ergebnisse liefert wie die serverseitige Lösung.

Dieses spezielle Problem scheint nicht wirklich benötigen eine Client-seitige Lösung, oder? Ich würde bei der serverseitigen Lösung bleiben. Die einzige zusätzliche Arbeit dort ist eine foreach Schleife mit einer echo und das ist nicht wirklich so ressourcenschwere ist es (es sei denn, Sie haben es profiliert und wissen, dass es ist)? Und der resultierende Code ist alles an einem Ort und einfacher.

1

Normalerweise ist es am besten, nicht davon abhängig zu sein, dass Javascript auf dem Client aktiviert ist. Darüber hinaus wird Ihre Seite von den meisten Suchmaschinen nicht gecrawlt. Sie geben auch Informationen über Ihren Server-/Server-Code frei (es sei denn, Sie abstrahieren ihn explizit).

Wenn Sie Daten in die Ansicht transformieren möchten, sollten Sie sich XSLT ansehen. Eine andere Sache, über die Sie sich informieren sollten, wenn Sie es nicht schon getan haben, ist progressive Verbesserung.

http://alistapart.com/articles/understandingprogressiveenhancement/

Im ersten clientseitige Lösung, die Sie vorgestellt, es ist eigentlich weniger effizient, weil es eine zusätzliche HTTP-Anforderung ist. Und die zweite ist möglicherweise auch nicht sehr effizient, da alle Daten mit json_encode verarbeitet werden müssen.

Wenn jedoch, was Sie gerade arbeiten, eine Rich-Web-Anwendung, die auf Javascript abhängt, sehe ich kein Problem mit allem, was mit Javascript, wenn Sie wollen.

+0

Tatsächlich macht Google große Fortschritte bei der Indexierung von JS-Inhalten. Siehe zum Beispiel http://googlewebmastercentral.blogspot.com/2007/11/spiders-view-of-web-20.html – nico

1

Ich bin skeptisch, dass das Verschieben der Berichtsgenerierung auf die Client-Seite wirklich alle Ressourcen speichert - denken Sie daran, dass es immer noch eine HTTP-Anfrage an Ihren (?) Server zurückgibt, damit die Datenbankverarbeitung noch ausgeführt wird.

Auch das Verteilen Ihres Datenbankschemas auf der Clientseite könnte ein Rezept für Datenbankangriffe sein.

Vielleicht sollten Sie ein Model-View-Controller-Muster verwenden, um die Geschäftslogik von der Präsentation auf dem Server zu trennen? Zumindest hält dies den gesamten Code an einem Ort, aber Sie können die Komponenten logisch trennen. Sieh dir etwas wie Zend Framework an, wenn dir das nützlich erscheint.

0

Sie können eine bessere Trennung von Bedenken erhalten, indem Sie sie auf der Clientseite erstellen, aber das kann zu Lasten der Benutzererfahrung gehen, wenn viel zu laden ist (und Sie müssen darüber nachdenken, was FrustratedWithForms erwähnt). Für mich ist es einfacher, es auf der Serverseite zu erstellen, was bedeutet, dass es zu einer wünschenswerteren Option wird, wenn Sie sich auf einer strengen Zeitlinie befinden, aber basierend auf Ihren Fähigkeiten entscheiden.