No querrás renderizar en el servidor tu aplicación Next.js

Rate this content
Bookmark

Next.js es un marco de trabajo fantástico; ofrece muchas características únicas, ayudándote a construir cualquier aplicación web sin esfuerzo. Pero cuando se trata de elegir la estrategia de renderizado correcta para tus páginas, puedes enfrentarte a un problema; ¿cómo debería renderizarlas? ¿Debería generarlas estáticamente en el momento de la construcción? ¿Debería renderizarlas en el servidor en tiempo de ejecución? Bueno, la respuesta es sorprendente. La renderización en el servidor rara vez es la mejor opción, y vamos a explorar por qué (¡y cómo resolver este problema!)

This talk has been presented at React Summit 2022, check out the latest edition of this React Conference.

FAQ

Next.js es un framework de JavaScript para React que permite varias formas de renderización, como la renderización del lado del cliente, del lado del servidor y la generación de sitios estáticos. Es beneficioso porque mejora la velocidad de carga inicial de la página, la optimización de motores de búsqueda y facilita la creación de experiencias de usuario dinámicas y optimizadas.

La renderización del lado del cliente permite transiciones de página suaves sin necesidad de refrescar la página, manejo eficiente de los componentes perezosos y no requiere un servidor potente, lo que facilita la escalabilidad y la reducción de costos operativos.

La renderización del lado del servidor puede ser más segura porque permite manejar datos sensibles, como cookies de autenticación, directamente en el servidor, reduciendo el riesgo de exposición y ataques de intermediarios.

La generación de sitios estáticos puede ser limitante al no permitir contenido dinámico del lado del servidor. Sin embargo, este problema se puede mitigar con la regeneración estática incremental, que permite actualizar páginas en intervalos definidos sin necesidad de reconstruir todo el sitio.

El server side rendering genera el contenido de la página en el servidor en cada solicitud, lo que puede mejorar la seguridad y la SEO pero aumenta la carga del servidor. La generación de sitios estáticos pre-renderiza las páginas durante el tiempo de construcción y sirve archivos estáticos, lo que resulta en una alta velocidad de carga y menos uso del servidor.

La regeneración estática incremental es una característica de Next.js que permite actualizar páginas estáticas generadas previamente en intervalos definidos, lo que proporciona un equilibrio entre contenido dinámico y tiempos de carga rápidos sin necesidad de reconstruir todo el sitio web.

La elección de la estrategia de renderización afecta significativamente tanto al SEO como a la experiencia del usuario. La renderización del lado del servidor mejora la SEO pero puede afectar la velocidad de carga, mientras que la generación de sitios estáticos ofrece rápidas velocidades de carga pero puede no ser óptima para contenido dinámico frecuentemente actualizado.

Michele Riva
Michele Riva
28 min
21 Jun, 2022

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Next.js es un marco que permite la renderización en el lado del cliente y transiciones de página fáciles. La renderización en el servidor ofrece una aplicación más segura y una mejor optimización para motores de búsqueda, pero requiere un servidor. La generación de sitios estáticos proporciona un rendimiento y escalabilidad excepcionales, pero tiene limitaciones. La regeneración estática incremental resuelve el problema de reconstruir todo el sitio web. Elegir la estrategia de renderización correcta depende del escenario específico, y para los sitios web de comercio electrónico, se recomienda la generación de sitios estáticos con regeneración estática incremental.

1. Introducción a Next.js y sus Beneficios

Short description:

¡Hola a todos! Soy Michele, un arquitecto de software senior en NearForm y el autor de Real-World Next JS. NearForm es una empresa de servicios profesionales especializada en Node.js, React, Next.js, TypeScript y en el mantenimiento de paquetes de código abierto. Ahora, vamos a sumergirnos en Next.js. Es un maravilloso marco de trabajo que permite la renderización en el lado del cliente, proporcionando una experiencia similar a la de una aplicación nativa con transiciones de página fáciles y carga perezosa de componentes. Además, no requiere un servidor si no lo necesitas.

Hola a todos, y bienvenidos a mi charla, No Quieres Servir un Renderizador Fijo, Tu Próxima Aplicación JS. Antes de empezar, permítanme presentarme brevemente. Soy Michele. Trabajo como arquitecto de software senior en NearForm. Soy un experto desarrollador de Google y un MVP de Microsoft. También soy el autor de Real-World Next JS, que es un libro que, como puedes adivinar, habla sobre Next.js. Así que si después de la charla te gustaría charlar y hablar sobre Next.js, no dudes en ponerte en contacto. Estaré encantado de hablar contigo. Un par de palabras sobre NearForm. Somos una empresa de servicios profesionales, y estamos especializados en Node.js, React, Next.js, TypeScript, y lo que sea. Mantenemos muchos paquetes de código abierto que se descargan 1.2 mil millones de veces al mes en total. Así que si estás buscando un trabajo en el que puedas trabajar desde casa y estás realmente comprometido con el código abierto, no dudes en ponerte en contacto. Estaré encantado de presentarte a la empresa. Pero no estamos aquí por eso, así que hablemos de Next.js. En primer lugar, ¿qué es Next.js? ¿Por qué queremos usarlo? ¿Y por qué es tan maravilloso? Cuando React empezó a ser algo, básicamente solo teníamos la renderización en el lado del cliente. Así que esa era la norma. Básicamente generamos un gran paquete y lo servimos a través de la red. Este paquete contendrá toda la aplicación y tan pronto como se transfiera al navegador, el navegador leerá el archivo, el archivo JavaScript, lo ejecutará, y tendremos el DOM listo para ser navegado.

Así que básicamente, el problema con este enfoque, pero veremos muchos problemas más adelante, es que esto es lo que vemos cuando descargamos el paquete por primera vez. Así que mientras se está descargando, mientras se está ejecutando, vemos un spinner. Después de varios segundos, veremos la página completa lista para ser navegada. Así que este enfoque tiene algunos contras y algunos pros. Así que veamos por qué podría ser una buena o una mala elección. Así que en primer lugar, te hace sentir tu aplicación, como si fuera una aplicación nativa, y eso es porque las transiciones de página son realmente fáciles de manejar, y no tienes que refrescar la página cada vez. Cada vez que haces clic en un botón, por ejemplo, y vas a otra página, no necesitas un refresco de página. Ya tienes todos los componentes que necesitas que se cargan de forma perezosa directamente en el navegador. Así que por ejemplo, estás en la página de inicio, haces clic para leer un artículo, todo el DOM se refresca, pero la página no. Así que el DOM React intercambiará el contenido con el nuevo, y ejecutará los componentes perezosos que aún no se han ejecutado durante la primera carga. Otra gran cosa sobre la renderización en el lado del cliente es que no necesitas un servidor. Y si lo necesitas porque ya tienes uno y quieres servir tu aplicación en el lado del cliente

2. Pros y Contras de la Renderización del Lado del Servidor en React

Short description:

Y no hay carga de trabajo en el servidor, lo cual es bastante bueno porque es realmente fácil de escalar. Pero si no tienes un servidor, eso sigue siendo bueno, puedes simplemente poner tus archivos, activos estáticos, en un CDN en S3 en AWS, por ejemplo, o usando páginas de Cloudflare, o lo que sea. Y simplemente puedes alojar una aplicación completa directamente desde algo que no necesita un servidor en absoluto. Aunque esto es bueno para muchas cosas, también tiene algunos problemas, por ejemplo, con la optimización de motores de búsqueda. React no es particularmente bueno para la optimización de motores de búsqueda, especialmente en mercados fuera de Europa y América. Además, React tiene un tiempo de carga inicial de la página lento. La renderización del lado del servidor ofrece un enfoque diferente, proporcionando una aplicación más segura, compatibilidad para usuarios que no usan JavaScript y una mejor optimización de motores de búsqueda. Sin embargo, requiere un servidor y conlleva mayores costos de mantenimiento.

desde un servidor, no requiere mucho poder. Y no hay carga de trabajo en el servidor, lo cual es bastante bueno porque es realmente fácil de escalar. Pero si no tienes un servidor, eso sigue siendo bueno, puedes simplemente poner tus archivos, activos estáticos, en un CDN en S3 en AWS, por ejemplo, o usando páginas de Cloudflare, o lo que sea. Y simplemente puedes alojar una aplicación completa directamente desde algo que no necesita un servidor en absoluto. Aunque esto es bueno para muchas cosas, también tiene algunos problemas, por ejemplo, con la optimización de motores de búsqueda. Todos sabemos que React, no es particularmente bueno para la optimización de motores de búsqueda, lo cual es cierto. Pero realmente depende del mercado que te importe. Por ejemplo, si te importa el mercado europeo y americano, sabemos que Google es el motor de búsqueda número uno y Google hoy en día es capaz de indexar contenido de React. Pero puede haber otros motores de búsqueda que son más populares en otros continentes, como Asia, por ejemplo, o África, que no leen páginas generadas por React. Así que si realmente te importan esos continentes y mercados, definitivamente deberías buscar algo diferente para construir tu aplicación.

Otro inconveniente es que React es realmente malo para el tiempo de carga inicial de la página, como vimos. Así que la primera vez que descargas un paquete, simplemente tienes que esperar varios segundos para poder navegar por él. Por eso empezamos a ver la renderización del lado del servidor como una forma diferente de abordar la renderización de React específicamente. Con la renderización del lado del servidor, esto es lo que obtienes tan pronto como solicitas una página. Puede tardar un par de segundos, porque el servidor todavía necesita renderizar la aplicación en el lado del servidor, pero eventualmente te enviará la página completa lista para navegar.

Así que este enfoque también tiene algunos pros y contras. Veamos cuáles son. Un pro, la aplicación podría ser un poco más segura. Eso es porque podrías tener cookies del lado del servidor, por ejemplo, para la autenticación, y no tienes que compartir esas cookies con el cliente, lo que hace que tu aplicación sea más segura. Puedes ocultar algunas solicitudes de servidor a servidor sin exponerlas en el cliente. Eso limita la posibilidad de un ataque de hombre en el medio, por ejemplo. Además, terminas teniendo sitios web más compatibles. Si no tienes JavaScript habilitado, todavía verás el primer renderizado de tu aplicación. La optimización de motores de búsqueda se mejora gracias a la renderización del lado del servidor, porque básicamente terminas teniendo un producto que es el mismo que podrías tener con Ruby on Rails, JavaScript Boot, Laravel, o lo que sea. El contenido puede ser altamente dinámico, y puedes tener ese tipo de dinamismo directamente en el servidor. Así, dependiendo del usuario que esté actualmente conectado, por ejemplo, podrías decidir renderizar cosas diferentes directamente en el servidor. Por supuesto, también tiene algunos problemas. Por ejemplo, se requiere un servidor. Cada solicitud se renderiza en el servidor y se transmite a los navegadores una vez renderizada. Así, habrá una mayor carga de trabajo en el servidor,

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Simplificando los Componentes del Servidor
React Advanced 2023React Advanced 2023
27 min
Simplificando los Componentes del Servidor
Top Content
React server components simplify server-side rendering and provide a mental model of components as pure functions. Using React as a library for server components allows for building a basic RSC server and connecting it to an SSR server. RSC responses are serialized virtual DOM that offload code from the client and handle interactivity. The client manifest maps serialized placeholders to real components on the client, enabling dynamic rendering. Server components combine the best of classic web development and progressive enhancement, offering the advantage of moving logic from the client to the server.
Una Guía del Comportamiento de Renderizado de React
React Advanced 2022React Advanced 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Acelerando tu aplicación React con menos JavaScript
React Summit 2023React Summit 2023
32 min
Acelerando tu aplicación React con menos JavaScript
Top Content
Mishko, the creator of Angular and AngularJS, discusses the challenges of website performance and JavaScript hydration. He explains the differences between client-side and server-side rendering and introduces Quik as a solution for efficient component hydration. Mishko demonstrates examples of state management and intercommunication using Quik. He highlights the performance benefits of using Quik with React and emphasizes the importance of reducing JavaScript size for better performance. Finally, he mentions the use of QUIC in both MPA and SPA applications for improved startup performance.
Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
Explorando los fundamentos de los Componentes del Servidor React
React Day Berlin 2023React Day Berlin 2023
21 min
Explorando los fundamentos de los Componentes del Servidor React
Top Content
This Talk introduces React Server Components (RSC) and explores their serialization process. It compares RSC to traditional server-side rendering (SSR) and explains how RSC handles promises and integrates client components. The Talk also discusses the RSC manifest and deserialization process. The speaker then introduces the Waku framework, which supports bundling, server, routing, and SSR. The future plans for Waku include integration with client state management libraries.

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
AI para Desarrolladores de React
React Advanced 2024React Advanced 2024
142 min
AI para Desarrolladores de React
Featured Workshop
Eve Porcello
Eve Porcello
El conocimiento de las herramientas de AI es fundamental para preparar el futuro de las carreras de los desarrolladores de React, y la suite de herramientas de AI de Vercel es una vía de acceso accesible. En este curso, examinaremos más de cerca el Vercel AI SDK y cómo esto puede ayudar a los desarrolladores de React a construir interfaces de transmisión con JavaScript y Next.js. También incorporaremos APIs de terceros adicionales para construir y desplegar una aplicación de visualización de música.
Temas:- Creación de un Proyecto de React con Next.js- Elección de un LLM- Personalización de Interfaces de Transmisión- Construcción de Rutas- Creación y Generación de Componentes - Uso de Hooks (useChat, useCompletion, useActions, etc)
Construyendo aplicaciones web que iluminan Internet con QwikCity
JSNation 2023JSNation 2023
170 min
Construyendo aplicaciones web que iluminan Internet con QwikCity
Featured WorkshopFree
Miško Hevery
Miško Hevery
Construir aplicaciones web instantáneas a gran escala ha sido elusivo. Los sitios del mundo real necesitan seguimiento, análisis y interfaces y interacciones de usuario complejas. Siempre comenzamos con las mejores intenciones pero terminamos con un sitio menos que ideal.
QwikCity es un nuevo meta-framework que te permite construir aplicaciones a gran escala con un rendimiento de inicio constante. Veremos cómo construir una aplicación QwikCity y qué la hace única. El masterclass te mostrará cómo configurar un proyecto QwikCity. Cómo funciona el enrutamiento con el diseño. La aplicación de demostración obtendrá datos y los presentará al usuario en un formulario editable. Y finalmente, cómo se puede utilizar la autenticación. Todas las partes básicas para cualquier aplicación a gran escala.
En el camino, también veremos qué hace que Qwik sea único y cómo la capacidad de reanudación permite un rendimiento de inicio constante sin importar la complejidad de la aplicación.
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
React Summit 2022React Summit 2022
173 min
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
Top Content
WorkshopFree
Kellen Mace
Kellen Mace
En esta masterclass, aprenderás cómo construir una aplicación Next.js que utiliza Apollo Client para obtener datos de un backend de WordPress sin cabeza y usarlo para renderizar las páginas de tu aplicación. Aprenderás cuándo debes considerar una arquitectura de WordPress sin cabeza, cómo convertir un backend de WordPress en un servidor GraphQL, cómo componer consultas usando el IDE GraphiQL, cómo colocar fragmentos GraphQL con tus componentes, y más.
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión
La Puerta al Backend: Guía del Desarrollador Frontend para el Desarrollo Full-Stack
React Summit US 2023React Summit US 2023
160 min
La Puerta al Backend: Guía del Desarrollador Frontend para el Desarrollo Full-Stack
Top Content
WorkshopFree
Amy Dutton
Amy Dutton
Esta masterclass te guiará a través del ciclo de vida del desarrollo de productos para crear una aplicación web del mundo real. Aprenderás sobre los Componentes del Servidor React, construyendo un sistema de diseño dentro de Storybook, y utilizando el desarrollo frontend para acercarte a convertirte en un desarrollador full-stack. La masterclass cubrirá el aumento de la confianza en tu aplicación con pruebas unitarias e implementando autenticación y autorización. Tendrás la oportunidad de trabajar a través de las características del producto y examinar un proyecto real de RedwoodJS, obteniendo valiosa experiencia en el desarrollo de productos del mundo real. RedwoodJS hace que sea simple acercarse al desarrollo full-stack, y esta masterclass te dará las habilidades que necesitas para crear tus propias aplicaciones web del mundo real.