Contenido del curso
Antes de optimizar...
Crítical Rendering Path
- 7

Entendiendo el Critical Rendering Path en Navegadores Web
11:11 min - 8

Optimización de JavaScript para mejorar rendimiento web
10:53 min - 9

Priorización de recursos CSS para mejorar rendimiento web
11:50 min - 10

Optimización de Carga de Recursos con Preload, Prefetch y Preconnect
10:36 min - 11

Optimización de Animaciones CSS para Mejorar el Renderizado
02:35 min
CSS
WebFonts
Imágenes, Iconos y SVG
- 15

Optimización de Imágenes para Web: Formatos y Herramientas Efectivas
15:32 min - 16

Optimización de Imágenes para Web: Uso de Tamaños y Formatos Adecuados
05:20 min - 17

Comparación entre WebFonts y SVG: Ventajas y Desventajas
08:58 min - 18

Lazy Loading de Imágenes: Técnicas y Estrategias Efectivas
10:14 min - 19

Carga Adaptativa de Imágenes con Gatsby y Web API
04:12 min
Aplicaciones JavaScript
- 20

Optimización de JavaScript para Producción Web
11:20 min - 21

Análisis y Optimización de Bundles con Webpack
11:25 min - 22

Optimización de Bundles en Proyectos Web con Webpack
17:14 min - 23

Code Splitting con Webpack: Optimización de Bundles en Proyectos Web
06:31 min - 24

Lazy Loading de Videos con JavaScript y Modales
21:44 min - 25

Event Propagation y Filtrado de Eventos en JavaScript
17:24 min - 26

Integración de Librerías en Proyectos JavaScript
14:57 min - 27

Optimización de Carga de Modales con Lazy Loading en Webpack
13:24 min - 28

Renderizado en Cliente vs. Servidor: Diferencias y Funciones
Viendo ahora - 29

Implementación de Server Side Rendering en NodeJS
19:41 min - 30

Optimización de Sitios con Static Site Generation
15:51 min
Caché
- 31

Funcionamiento de Caché y Redes de Distribución de Contenido (CDN)
05:50 min - 32

Configuración y despliegue de sitios web con Netlify y Github Actions
09:03 min - 33

Automatización de despliegues con Github Actions y Cron en Netlify
09:25 min - 34

Implementación de Caché con Service Workers en JavaScript
14:04 min
Performance Budget
Conclusiones
Renderizado en Cliente vs. Servidor: Diferencias y Funciones
Resumen
Cuando una aplicación genera su contenido directamente en el navegador del usuario, toda la responsabilidad del procesamiento recae sobre el dispositivo del visitante. Entender dónde ocurre ese proceso de renderizado —si en el cliente o en el servidor— es fundamental para tomar decisiones de arquitectura que impacten el rendimiento y la experiencia de usuario.
¿Cómo funciona el client side rendering?
El client side rendering (CSR) es el modelo en el que el navegador se encarga de construir el HTML visible a partir de JavaScript. El flujo es el siguiente [0:42]:
- El navegador (browser) se conecta al servidor mediante HTTP.
- El servidor responde con un archivo
index.html, que es una página prácticamente vacía en cuanto a contenido dinámico. - El navegador inicia el Critical Rendering Path, un proceso que ya conocemos para interpretar y pintar el HTML recibido.
- Durante la lectura del HTML, el navegador detecta que necesita un archivo llamado
bundle.js[2:28]. - Solicita ese archivo al servidor, lo descarga, lo parsea y lo ejecuta.
- Una vez ejecutado, JavaScript se conecta a las APIs necesarias, obtiene la información y la convierte en HTML visible.
Este último paso es la esencia del CSR: todo el contenido principal se genera dentro del navegador del usuario [3:13]. El problema es que nada se muestra hasta que el JavaScript ha sido completamente descargado y ejecutado. En el ejemplo práctico, los carousel items de anime no aparecen hasta que se cumple esa condición [0:16].
¿Qué cambia con el server side rendering?
El server side rendering (SSR) consiste en tomar ese bloque de renderizado que antes ocurría en el cliente y moverlo al servidor [3:32]. El flujo se transforma así [3:46]:
- El navegador hace la solicitud HTTP al servidor.
- Antes de responder con el
index.html, el servidor ejecuta JavaScript internamente. - Ese JavaScript se conecta a las APIs, obtiene los datos y renderiza el HTML en el servidor.
- El HTML resultante se incluye directamente dentro del
index.htmlque se envía al navegador [4:28].
La diferencia es notable: cuando el navegador recibe el archivo, el Critical Rendering Path trabaja principalmente con HTML ya resuelto, porque el contenido dinámico viene pre-construido desde el servidor [4:38].
¿Se sigue enviando JavaScript al navegador?
Sí. En SSR también se envía un archivo bundle.js, pero su propósito cambia [4:52]. En lugar de generar todo el contenido desde cero, este JavaScript se encarga de agregar interactividad: que los botones respondan a clics, que se abran modales o que se ejecuten animaciones. La mayoría del contenido visible ya está resuelto en el HTML.
¿Por qué se menciona Node en este contexto?
Históricamente, el renderizado en el servidor se hacía con tecnologías como PHP, Python o Ruby. Lo relativamente nuevo es realizarlo con Node.js [4:15], lo que permite usar el mismo lenguaje (JavaScript) tanto en el cliente como en el servidor. Esto no significa que sea la única opción; cualquier tecnología de backend puede implementar SSR.
¿Cuáles son las diferencias clave entre CSR y SSR?
- CSR: el servidor envía un HTML vacío y un archivo JavaScript pesado. El navegador construye el contenido tras descargar y ejecutar ese JS.
- SSR: el servidor genera el HTML con el contenido ya incluido. El navegador recibe una página lista para mostrar y solo necesita JS adicional para la interactividad.
- En CSR, la carga de procesamiento está en el dispositivo del usuario.
- En SSR, esa carga se traslada al servidor, lo que suele mejorar el tiempo de primera visualización.
El proceso de handshaking y la resolución de DNS ocurren en ambos casos como parte del protocolo HTTP [1:22], pero la gran diferencia está en qué tan completo llega el HTML al navegador.
Ahora que la diferencia entre ambos modelos está clara de forma visual, el siguiente paso es ver cómo se implementa el server side rendering directamente en código. Si tienes dudas sobre cuándo conviene usar uno u otro enfoque, comparte tu experiencia en los comentarios.