Причина в стабильности .
На стороне сервера я могу выбрать стабильные компоненты. Обычно это означает, что я выбираю Java и несколько очень тщательно отобранных библиотек, таких как FreeMarker. Излишне говорить, что каждая библиотека, кроме стандартных библиотек Java, рассматривается как одноразовая, поэтому я обращаюсь к внешним библиотекам через самодельную оболочку. Это означает, что я могу легко перейти из одной библиотеки в другую, если возникнет необходимость.
Всякий раз, когда я обновляю Java до новой версии, она обычно работает хорошо, потому что Java является чрезвычайно стабильным компонентом даже при обновлении основных версий. Кроме того, на каждом из моих серверов работает одна и та же версия Java. Не каждый клиент использует одну и ту же реализацию JavaScript.
На стороне клиента я не могу выбрать стабильные компоненты. Производители браузеров заставят меня выбрать JavaScript, язык, который мне особенно не нравится, но который я вынужден использовать. (И не говорите мне о языках, которые скомпилированы в JavaScript, они ужасны!) Реализация JavaScript каждого браузера отличается. Это означает, что тестировать мой продукт с каждой поддерживаемой версией браузера - это настоящий ад.
Мое решение? Я выполняю как можно больше обработки на стороне сервера, а на стороне клиента - только облегченная оболочка, которая отправляет данные на сервер и получает данные с сервера в виде фрагментов JSON и HTML. Избегайте XML; используйте вместо этого JSON.
Я не занимаюсь шаблонами на стороне клиента; Я отображаю содержимое на сервере в HTML-фрагмент, который затем назначаю с помощью .innerHTML
атрибута различным элементам-заполнителям на стороне клиента. Это позволяет максимально упростить стек технологий, поскольку мне не нужны два движка шаблонов (один на Java и один на JavaScript).
Недостатком, очевидно, является задержка скорости света; Полсекунды латентности не редкость между континентами.
Учтите, что вашими клиентами в наши дни могут быть смартфоны. Смартфоны имеют ограниченное время автономной работы, поэтому, если вы выполняете тяжелые вычисления, лучше разгрузить их на свои серверы. Однако простые вещи могут быть более энергоэффективными, если они выполняются на стороне клиента, потому что тогда вы можете избежать радиодоступа. Но главный аргумент, стабильность, может означать, что на самом деле имеет смысл перегрузить даже простые вычисления на сервер.
Как дополнение, как уже отмечалось в некоторых ответах, вы также получаете безопасность . Если логика приложения полностью на стороне клиента, кто-то может, например, установить цену на любую вещь, которую он собирается купить в вашем интернет-магазине.