Причина - стабільність .
На стороні сервера я можу вибрати стабільні компоненти. Зазвичай це означає, що я вибираю Java та купу дуже ретельно підібраних бібліотек, таких як FreeMarker. Потрібно сказати, що кожна бібліотека, окрім стандартних бібліотек Java, трактується як одноразова, тому я отримую доступ до зовнішніх бібліотек через саморобну обгортку. Це означає, що я можу легко змінюватися з однієї бібліотеки в іншу, якщо виникає вимога.
Щоразу, коли я оновлюю Java до нової версії, вона зазвичай працює добре, тому що Java є надзвичайно стабільним компонентом навіть у великих оновленнях версій. А також, кожен сервер, на якому я працює, має однакову версію Java. Не кожен клієнт працює однаковою реалізацією JavaScript.
З боку клієнта я не можу вибрати стабільні компоненти. Виробники браузерів змусять мене вибрати JavaScript, мову, яка мені особливо не подобається, але ту, яку я змушений використовувати. (І не кажіть мені про мови, зібрані в JavaScript, вони жахливі!) Реалізація JavaScript у кожного браузера різна. Це означає, що я перевіряю свій продукт на кожній підтримуваній версії браузера.
Моє рішення? Я виконую стільки обробок, скільки можу на стороні сервера, а клієнтська сторона - це лише легка обгортка, яка надсилає дані на сервер і отримує дані з сервера у вигляді фрагментів JSON та HTML. Уникати XML; використовувати замість JSON.
Я не роблю шаблонів на стороні клієнта; Я передаю вміст на сервері до фрагмента HTML, який я потім присвоюю, використовуючи .innerHTML
атрибут для різних елементів-заповнювачів на стороні клієнта. Це забезпечує стек технологій максимально простим, тому що мені не потрібні два двигуни шаблону (Java і JavaScript).
Недолік - очевидно, затримка швидкості світла; половина секунди затримки не рідкість між континентами.
Вважайте, що вашими клієнтами в ці дні можуть бути смартфони. Смартфони мають обмежений термін служби акумулятора, тому якщо ви робите великі обчислення, краще завантажте їх на свої сервери. Однак, прості речі можуть бути більш енергоефективними, якщо це зроблено на стороні клієнта, оскільки тоді ви можете уникнути радіодоступу. Але головний аргумент, стабільність, може означати, що насправді може мати сенс завантажувати навіть прості обчислення на сервер.
Як додаток, як уже зазначалося в деяких відповідях, ви також отримуєте безпеку . Якщо логіка програми повністю залежить від клієнта, хтось може, наприклад, встановити ціну на те, що він збирається придбати у вашого веб-магазину.