Генерация разметки HTML: клиентская сторона Vs. Серверная сторона, ваша перспектива?

Чтобы избежать обновления страниц в веб-приложениях, существует несколько способов генерации разметки

a) Сделайте вызов Ajax, создайте разметку (HTML) на стороне сервера и верните ее в качестве ответа, обработайте DOM с новым контентом на стороне клиента.

b) Сделайте вызов Ajax, который возвращает данные в формате JSON, на клиентской стороне использует механизм шаблонов и javascript для обновления DOM.

Я могу думать следующие соображения, каковы ваши мысли/опыт с этими альтернативами?

1) Язык: для подхода A выше вы можете запрограммировать любой язык, выбранный вами на сервере. Для подхода B требуется JavaScript.

2) Повторное использование реализации на стороне сервера: повторные вызовы JSON имеют больше возможностей повторного использования при сравнении с вызовами, возвращающими HTML-разметку (это действительно не проблема, если нет потребителей за пределами приложения)

P, S.: 1) Здесь есть аналогичный вопрос - Создание HTML: PHP-серверная сторона и клиентская сторона jQuery. В моем сценарии я предлагаю использовать механизм моделирования шаблонов на стороне клиента, например tmpt, ejs.

2) На сервере, а также на стороне клиента, я планирую использовать шаблон MVC.

Ответы

Ответ 1

Я думаю, это сводится к вашей зоне комфорта. Я использую ASP.NET MVC и работал с обоими подходами. По моему опыту, генерация разметки на стороне сервера имеет тенденцию быть более четкой и легкой для отладки. Каждый раз, когда вы делите операцию просмотра между клиентом и сервером, вы вводите сложность. Я считаю, что простота в настоящее время является значительно недооцененным атрибутом качества программного обеспечения.

В ASP.NET MVC серверный код следует хорошо известным соглашениям в своей организации, имеет хорошую поддержку отладчика и интеграцию инструмента.

Напротив, хотя существуют лучшие практики, организация кода JavaScript часто основана на мнениях отдельных разработчиков. Я использую Firebug для отладки JS. Я не считаю отладчик VS намного лучше для клиента. Оба варианта не соответствуют уровню отладки серверной части.

Имея это в виду, я склоняюсь к созданию разметки на стороне сервера, но, если нужно, используйте AJAX. Каждый раз, когда вы выполняете разделение операций просмотра между сервером и клиентом, вы вводите сложность и усложняете работу и отладку.

Что касается возвращения JSON для "повторного использования", я бы назвал YAGNI. Во-первых, возвращающая разметка означает, что операция более атомарная серверная, а клиентская AJAX - для упрощения ее загрузки. Во-вторых, если вам действительно нужна реализация JSON, это простой рефакторинг.

Чтобы завершить работу, я пытаюсь использовать правило: "Сколько времени потребуется новому разработчику среднего уровня joe для понимания и внесения изменений в этот код?" Все, что вы делаете, чтобы сделать этот период короче, вероятно, хорошо в долгосрочной перспективе.

Ответ 2

И снова правильный ответ основывается на ситуации.

Если вы подаете данные на виджет клиентской стороны, такие как автозаполнение или таблица данных, то JSON - это способ сделать это. Загружайте данные как можно более сырые, чтобы они легко удобоваримы рассматриваемым компонентом.

Если вы просто показываете данные или открываете страницу в диалоговом окне, я предлагаю использовать серверную часть для компиляции HTML. Не позволяйте методу передачи данных изменять, как вы обычно генерируете HTML. Если вы, как правило, должны скомпилировать HTML-код, не допускайте, чтобы запрос AJAX запрашивал его, изменил ваше решение. innerHTML - чрезвычайно эффективный и эффективный способ быстрого превращения HTML в DOM.

Ответ 3

На самом деле, оба варианта требуют JavaScript, так как вам нужен JS для Ajax.

Я использовал оба подхода, и это действительно зависит от вашего приложения. Я не думаю, что "в целом" лучше другого. Некоторые мысли:

  • Если вы решите сделать шаблон, я бы предложил jquery tmpl и предложил бы вам попробовать http://knockoutjs.com/
  • Если вы решили просто вернуть HTML, убедитесь, что у вас нет JavaScript в этих частичных файлах. Я пришел к команде, которая это делала, и это не вызывает никаких проблем.

Ответ 4

Я бы сказал, что это зависит от того, для чего предназначен этот ajax-вызов.

Если вы делаете достаточно существенные дополнения или изменения на странице, тогда ajax вернет завершенную разметку.

Если вы делаете небольшие изменения в разных областях страницы, верните их в say json и выполните клиентскую обработку.

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