Создание веб-страниц на стороне сервера или на стороне клиента? - PullRequest
5 голосов
/ 01 декабря 2010

Мне всегда было интересно, как выбрать между использованием кода на стороне сервера и кода на стороне клиента для создания 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 и делают его намного более читабельным.

Есть комментарии?Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 01 декабря 2010

Con (клиентское решение): клиентское решение полагается на клиент для правильного выполнения вашего кода.Поскольку у вас нет контроля над тем, какая клиентская система будет выполнять ваш код, гораздо труднее обеспечить, чтобы он последовательно давал те же результаты, что и решение на стороне сервера.* нужно клиентское решение, не так ли?Я бы придерживался серверного решения.Единственная дополнительная работа - это цикл foreach с одним echo, и это не так уж и много ресурсов, не так ли (если вы не профилировали его и не знаете, что это так)?И полученный код все в одном месте и проще.

1 голос
/ 01 декабря 2010

Я скептически отношусь к тому, что перенос создания отчета на клиентскую часть действительно экономит любые ресурсы - помните, что он все еще выполняет HTTP-запрос обратно на ваш (?) Сервер, поэтому обработка базы данных по-прежнему завершается.

Кроме того, передача вашей схемы базы данных на стороне клиента может быть рецептом для атак базы данных.

Возможно, вам следует использовать шаблон модель-представление-контроллер, чтобы отделить бизнес-логику от представления на сервере? По крайней мере, это сохраняет весь код в одном месте, но позволяет логически разделять компоненты. Посмотрите на что-то вроде Zend Framework, если это звучит полезно для вас.

1 голос
/ 01 декабря 2010

Как правило, лучше не зависеть от того, включен ли Javascript на клиенте. Кроме того, большинство поисковых систем не будет сканировать вашу страницу. Вы также предоставляете информацию о своем серверном / серверном коде (если вы явно не абстрагируете его).

Если вы хотите преобразовать данные в представление, вы можете взглянуть на XSLT. Еще одна вещь, которую стоит прочитать, если вы еще этого не сделали, - это прогрессивное улучшение.

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

В первом представленном вами клиентском решении оно на самом деле менее эффективно, поскольку существует дополнительный HTTP-запрос. И второй, возможно, не очень эффективен, поскольку все данные должны обрабатываться с помощью json_encode.

Однако, если вы работаете с многофункциональным веб-приложением, которое зависит от Javascript, я не вижу проблем с выполнением всего с Javascript, если вы хотите.

0 голосов
/ 01 декабря 2010

Вы можете лучше разделять проблемы, создавая их на стороне клиента, но это может стоить пользовательского опыта, если есть много возможностей для загрузки (плюс вы должны учитывать то, что упоминалось в FrustratedWithForms).Для меня это проще построить на стороне сервера, что означает, что это становится более желательным вариантом, если вы находитесь на строгой временной шкале, но решаете, основываясь на вашем наборе навыков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...