Логика на стороне клиента ИЛИ Логика на стороне сервера? - PullRequest
54 голосов
/ 04 октября 2009

Я сделал несколько веб-проектов, и большинство трудностей, с которыми я столкнулся (вопросы, путаницы), можно было бы выяснить с помощью. Но у меня все еще есть важный вопрос, даже после того, как я спросил некоторых опытных разработчиков: Когда функциональность может быть реализована как с помощью кода на стороне сервера, так и с помощью сценариев на стороне клиента (JavaScript), какой из них предпочтительнее? Простой пример:

Чтобы отобразить динамическую HTML-страницу, я могу отформатировать страницу в коде на стороне сервера (PHP, python) и использовать Ajax для выборки отформатированной страницы и ее рендеринга напрямую (больше логики на стороне сервера, меньше на стороне клиента). ).

Я также могу использовать Ajax для извлечения данных (без форматирования, JSON) и использовать сценарии на стороне клиента для форматирования страницы и ее дальнейшей обработки (сервер получает данные из БД или другого источника и возвращает их). клиенту с JSON или XML. Больше логики на стороне клиента и меньше на сервере).

Так как я могу решить, какой из них лучше? Какой из них предлагает лучшую производительность? Зачем? Какой из них более удобный для пользователя?

С развитием движков JS в браузерах, JS можно интерпретировать за меньшее время, поэтому я должен предпочесть сценарии на стороне клиента?

С другой стороны, по мере развития аппаратного обеспечения производительность сервера растет, а стоимость логики на стороне сервера снижается, поэтому я должен предпочесть сценарии на стороне сервера?

EDIT:

С ответами я хочу дать краткое резюме.

Плюсы клиентской логики:

  1. Лучший пользовательский опыт (быстрее).
  2. Меньшая пропускная способность сети (более низкая стоимость).
  3. Повышенная масштабируемость (снижение нагрузки на сервер).

Плюсы серверной логики:

  1. Проблемы безопасности.
  2. Лучшая доступность и доступность (мобильные устройства и старые браузеры).
  3. Лучше SEO.
  4. Легко расширяется (может добавить больше серверов, но не может сделать браузер быстрее).

Похоже, нам нужно сбалансировать эти два подхода при столкновении с конкретным сценарием. Но как? Какая лучшая практика?

Я буду использовать логику на стороне клиента, за исключением следующих условий:

  1. Критическая безопасность.
  2. Специальные группы (отключен JavaScript, мобильные устройства и др.).

Ответы [ 12 ]

0 голосов
/ 04 октября 2009

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

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

0 голосов
/ 04 октября 2009

Я думаю, что второй вариант лучше. Например, если вы позже внедрите что-то вроде 'скинов', вы будете благодарны за то, что не отформатировали html на сервере:)

Он также сохраняет разницу между видом и контроллером. Данные Ajax часто создаются контроллером, поэтому пусть они просто возвращают данные, а не html.

Если вы собираетесь создать API позже, вам нужно будет сделать несколько изменений в коде

Кроме того, «голые» данные более кэшируемы, чем HTML, я думаю. Например, если вы добавите какой-то стиль в ссылки, вам нужно переформатировать все html .. или добавить одну строку в ваш js. И он не такой большой, как html (в байтах).

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

...