La razón es la estabilidad .
En el lado del servidor, puedo elegir componentes estables. Por lo general, esto significa que elijo Java y un montón de bibliotecas cuidadosamente seleccionadas, como FreeMarker. No hace falta decir que todas las bibliotecas, aparte de las bibliotecas estándar de Java, se tratan como desechables, por lo que accedo a las bibliotecas externas a través de un envoltorio hecho a sí mismo. Esto significa que puedo cambiar fácilmente de una biblioteca a otra si surge el requisito.
Cada vez que actualizo Java a una nueva versión, generalmente funciona bien porque Java es un componente extremadamente estable incluso en las actualizaciones de versiones principales. Y también, cada servidor que tengo está ejecutando la misma versión de Java. No todos los clientes ejecutan la misma implementación de JavaScript.
En el lado del cliente, no puedo elegir componentes estables. Los fabricantes de navegadores me obligarán a elegir JavaScript, un idioma que particularmente no me gusta, pero que me veo obligado a usar. (Y no me hable de los lenguajes que están compilados en JavaScript, ¡son horribles!) La implementación de JavaScript de cada navegador es diferente. Esto significa que es un infierno probar mi producto con cada versión de navegador compatible.
¿Mi solución? Realizo todo el procesamiento que puedo en el lado del servidor, y el lado del cliente es solo un contenedor ligero que envía datos al servidor y recibe datos del servidor en forma de fragmentos JSON y HTML. Evitar XML; use JSON en su lugar.
No hago plantillas del lado del cliente; Represento el contenido en el servidor a un fragmento HTML que luego asigno usando el .innerHTML
atributo a varios elementos de marcador de posición en el lado del cliente. Esto mantiene la pila de tecnología lo más simple posible, porque no necesito dos motores de plantilla (uno de Java y uno de JavaScript).
El inconveniente es obviamente la latencia de la velocidad de la luz; medio segundo de latencia no es infrecuente entre continentes.
Considere que sus clientes en estos días pueden ser teléfonos inteligentes. Los teléfonos inteligentes tienen una duración limitada de la batería, por lo que si está haciendo un cálculo pesado, es mejor descargarlo a sus servidores. Sin embargo, las cosas simples pueden ser más eficientes energéticamente cuando se realizan en el lado del cliente porque así puede evitar el acceso a la radio. Pero el argumento principal, la estabilidad, puede significar que en realidad puede tener sentido descargar incluso el cómputo simple al servidor.
Como anexo, como ya se observó en algunas respuestas, también obtiene seguridad . Si la lógica de la aplicación está totalmente del lado del cliente, alguien puede, por ejemplo, establecer un precio para cualquier cosa que vaya a comprar en su tienda web en línea.