Inicio / Artículos / Comprensión de los componentes de caché y el precarga parcial en Next.js 16.3

Comprensión de los componentes de caché y el precarga parcial en Next.js 16.3

Explica cómo la función de navegación instantánea de Next.js 16.3 utiliza estructuras de ruta compartidas y decisiones explícitas de transmisión para que las aplicaciones renderizadas en el servidor parezcan instantáneas.

1155 palabras

El App Router ha tenido desde hace tiempo una desventaja sutil en comparación con un SPA puramente renderizado por el cliente.

Cuando todo se ejecuta en el navegador, pasar de una ruta a otra no es más que una actualización de estado, por lo que, por definición, ocurre al instante. El renderizado server-first renuncia a esa sensación instantánea a cambio de una carga inicial mucho menor.

No obstante, se paga ese compromiso más tarde: cada navegación después de la primera implica volver a comunicarse con el servidor.

Next.js 16.3 aborda directamente ese problema exacto.

Esa función se llama Navegaciones Instantáneas y se basa en dos mecanismos subyacentes: Componentes en caché y precarga parcial.

Toda función de navegación que este framework ha lanzado hasta ahora se ha visto increíble en un MacBook.

¿Y qué hace realmente?

La idea proviene casi directamente del diseño de aplicaciones de una sola página. En lugar de precargar una copia completa de la página de destino para cada enlace, como ocurría en las versiones anteriores,

Next.js ahora precarga un esqueleto compartido por ruta y lo mantiene en caché en el cliente. En cuanto haces clic en un enlace, ese esqueleto se renderiza de inmediato mientras el servidor transmite el contenido restante.

Ese esqueleto está diseñado de forma deliberadamente sencilla. Se trata del layout, la barra de navegación, los títulos y la estructura básica; en resumen, todo aquello que se ve idéntico sin importar en qué página específica de esa ruta te encuentres. Como nunca cambia, es perfectamente seguro cachearlo una vez y reutilizarlo en docenas de enlaces que apunten a la misma ruta.

Puedes activarlo con dos indicadores de configuración:

const nextConfig: NextConfig = {
  cacheComponents: true,
  partialPrefetching: true,
};

Se espera que ambas banderas se conviertan en valores predeterminados en alguna futura versión importante. Activarlas hoy te coloca por delante de ese cambio, en lugar de quedarte atascado en un camino experimental sin salida.

Por qué esto es más que “prefetching, pero más rápido”

El verdadero cambio aquí no se trata principalmente de la velocidad bruta. Se trata de forzar una decisión explícita en cada ruta.

Next.js 16.3 introduce una nueva herramienta de desarrollo llamada Instant Insights, que marca automáticamente, directamente en tu entorno de desarrollo, cualquier navegación que no cumpla con los requisitos de ser instantánea. Para eliminar esa marca, cada ruta ahora debe indicar claramente qué debe ocurrir cuando sus datos aún no están listos. Existen exactamente tres respuestas válidas:

Transmitirlos en flujo. Envuelve la parte lenta con <Suspense> para que se muestre una interfaz de carga mientras el servidor finaliza su trabajo.

Guárdalo en caché. Etíquetalo con 'use cache' para que se pueda servir una versión generada previamente en lugar de esperar.

Bloquéalo intencionadamente. Utiliza export const instant = false en rutas donde esperar es de hecho el comportamiento adecuado, como la confirmación de pago, ya que mostrar datos obsoletos sería peor que hacer esperar al usuario un momento.

Ese tercer enfoque merece atención. Convierte la afirmación “esta ruta es lenta” de un accidente no detectado en una decisión deliberada y documentada. El framework no exige que todas las rutas sean instantáneas; simplemente indica que, a partir de ahora, ser lento debe ser intencional y no la opción por defecto.

Dónde esto realmente da resultados

El caso más evidente es cualquier contenido con una larga lista de enlaces, como un buzón de soporte que muestra cuarenta filas de tickets. Cada página individual de ticket probablemente comparte la misma barra de herramientas, cuadrícula de metadatos y estructura básica de conversación. Si se carga por adelantado una página separada para cada enlace, al final se carga esa misma estructura compartida cuarenta veces. En cambio, el precarga parcial carga la estructura compartida una sola vez, la reutiliza para cada enlace que apunta a esa ruta y solo transmite la parte que realmente es única: el contenido específico del ticket.

Eso representa una mejora concreta y significativa, y coincide estrechamente con la forma en que se construyen muchos paneles de control SaaS.

Lo que la mayoría de las explicaciones omiten

Un desarrollador migró un blog personal a la versión de prueba 16.3 en una rama separada, adoptando por completo los componentes de caché y la precarga parcial, y lo respaldó con un conjunto de 19 pruebas de Playwright diseñado específicamente para verificar que las navegaciones fueran instantáneas. Todas las pruebas superaron con éxito la verificación.

Después de probar ambas versiones durante una semana seguida, no pudieron detectar ninguna diferencia real.

La explicación resultó ser sorprendentemente sencilla.

El sitio ya era completamente estático: cada página se había preprocesado en el momento de la compilación y se servía directamente desde un CDN. No quedaba ningún viaje de ida y vuelta al servidor que eliminar, por lo que las Navegaciones Instantáneas no tenían ningún retraso que superar.

Lo que realmente hacía que el sitio pareciera más ágil era algo completamente distinto: la reducción de 341 KB en el JavaScript comprimido con gzip.

Esa es la precaución que debe tener en cuenta antes de adoptar esta función. Instant Navigations elimina el retraso entre hacer clic en un enlace y ver el contenido, especialmente para rutas dinámicas que dependen del servidor.

Si su aplicación ya es estática o ya es rápida por otras razones, estaría adoptando una función para resolver un problema que no existe en su caso.

Pruébela primero en las rutas que realmente parezcan lentas, en lugar de implementarla en todo el sitio, y mida los resultados con una conexión Android de gama media con ancho de banda limitado, en lugar de con una computadora portátil conectada a la red Wi-Fi rápida de la oficina. Vale la pena recordar el comentario sobre el MacBook al principio: casi todas las funciones de navegación que este framework ha introducido han parecido impresionantes en un MacBook.

El framework no exige que cada ruta sea instantánea. Lo que dice es que, a partir de ahora, ser lento debe ser algo intencional y no la norma por defecto.

Qué hacer al respecto

Si ya está utilizando Next.js 16.x y las navegaciones le parecen lentas, comience con algo sencillo. Active la carga parcial solo en sus dos o tres rutas más utilizadas antes de extenderla a otros lugares. La mayor parte de los beneficios proviene del trabajo preliminar, y probarlo en un alcance limitado también le permitirá averiguar si sus layouts estaban realmente separados de la obtención de datos, lo cual, en muchos proyectos reales, resulta ser el descubrimiento más útil.

Si aún estás utilizando el Pages Router y dudas sobre si migrar o no, esta característica no debería ser el factor decisivo. El hecho de que Turbopack se haya convertido en la opción predeterminada para el desarrollo, junto con la mayor estabilidad del App Router, son las verdaderas razones para hacer el cambio. Instant Navigations es un beneficio adicional que obtendrás después, no una razón para iniciar la migración desde el principio.

Y si tu aplicación ya es completamente estática, omite por completo la migración.

Ve a buscar tu propio archivo de 341KB en su lugar.

Leer más

  • Construyendo una página de detalle de film resiliente con Next.js App Router — Aprenda cómo obtener y almacenar en caché los datos de la API OMDB correctamente en Next.js App Router utilizando componentes de servidor asíncronos, parámetros esperados y un manejo adecuado de errores 404.
  • Comprendiendo la directiva “use cache” y la revalidación basada en etiquetas de Next.js 16 — Aprenda cómo funciona la directiva “use cache” en Next.js 16, sus funciones de revalidación asociadas y cómo aplicar un almacenamiento en caché sensible al tenant en aplicaciones multi-tenant.
  • 20 patrones avanzados de Next.js 16 para la arquitectura de aplicaciones a nivel senior — Un resumen del diseño basado en el servidor, el caché, la transmisión en flujo, PPR, rutas paralelas e interceptadoras, y otros patrones para desarrollar aplicaciones escalables con Next.js 16.