Asumiré que estás hablando de Javascript en el cliente y no en el servidor. También supondré que estás hablando de una aplicación completa, no solo de ajustar la capa de presentación.
Pros:
- Velocidad / rendimiento: cuanto más cerca esté la actividad del usuario, más rápido se percibirá; También transmitir datos sin el diseño será más rápido que enviar todo ese HTML.
- Abstracción de backend: si la comunicación del cliente al servidor se realiza a través de una API razonablemente sana, tiene mucha libertad para refactorizar, reescribir, reimaginar el proceso de backend sin tener que preocuparse por abordar el front-end al mismo tiempo
- Todos los niños geniales lo están haciendo:
Contras:
- ¿Es posible escribir código laravel incorrecto?
- ¿Debo aprender Meteor?
- ¿Dónde debo redirigir a los hackers que intentan acceder a archivos comunes como wp-config.php, o a usuarios como 'admin'?
- ¿Cuántas consultas MySQL están bien por página?
- Si comienza un nuevo proyecto, ¿cuál será mejor AngularJS 1.5.xo Angular2 a largo plazo?
- Otro idioma: si no está utilizando NodeJS / io.js, es otro idioma, un conjunto de paquetes y marcos para conocer, comprender y mantener
- Depende del cliente: ahora está a merced de cualquier combinación de dispositivo, hardware y navegador que tenga el usuario; eso podría ser algo agradable … o podría ser un procesador Atom e IE8 (tenga en cuenta que ni siquiera sé si esa combinación es posible)
- Seguridad: su código ahora se está ejecutando en una plataforma que no controla y no puede controlar; uno que su usuario pueda manipular de cualquier forma que elija. Todo lo que verifique en el cliente debe ser doblemente verificado en el servidor.