Featured image of post Puntos clave para la optimización del rendimiento en Next.js App RouterFeatured image of post Puntos clave para la optimización del rendimiento en Next.js App Router

Puntos clave para la optimización del rendimiento en Next.js App Router

Aprende técnicas clave para optimizar el rendimiento en Next.js App Router, centrándose en RSC y optimizaciones de imágenes.

Aprovechando las capacidades de React 18, Next.js App Router proporciona una arquitectura de alto rendimiento para construir frontends web modernos.

Sin embargo, configurar incorrectamente los límites servidor-cliente o las reglas de caché puede llevar a tiempos de respuesta lentos. En esta guía, exploramos técnicas prácticas de optimización para construir aplicaciones Next.js ultrarrápidas.


1. Maximiza los React Server Components (RSC)

El beneficio principal del App Router es que todos los componentes son Server Components por defecto. Esto elimina grandes porciones de JavaScript del bundle del lado del cliente.

Regla de optimización: Empuja "use client" a las hojas

Declarar "use client" en la parte superior de un archivo obliga a que todo el árbol de importación debajo sea descargado por el navegador. Para optimizar, aísla las funciones interactivas (como botones, hooks de estado y efectos secundarios) en pequeños componentes hoja.

// ✕ Anti-patrón: Convertir toda la página en un Client Component
'use client'
export default function Page() {
  const [data, setData] = useState(null)
  return <div>{/* Contenido estático pesado */}</div>
}

// ◯ Mejor práctica: Anidar Client Components dentro de Server Components
import HeavyStaticContent from './HeavyStaticContent' // RSC
import ClientInteractiveButton from './ClientInteractiveButton' // Client

export default function Page() {
  return (
    <div>
      <HeavyStaticContent />
      <ClientInteractiveButton />
    </div>
  )
}

2. Manejo inteligente de imágenes con next/image

Las imágenes en el viewport influyen fuertemente en tu puntuación de Largest Contentful Paint (LCP).

Precarga activos críticos usando priority

Asegúrate de agregar el atributo priority a la imagen principal o logo para que el navegador precargue el activo antes de analizar scripts secundarios.

import Image from 'next/image'

export default function Hero() {
  return (
    <div className="hero-banner">
      <Image
        src="/images/hero-visual.png"
        alt="Imagen principal"
        width={1200}
        height={630}
        priority
        sizes="(max-width: 768px) 100vw, 1200px"
      />
    </div>
  )
}

Además, define el atributo sizes con precisión para evitar que el servidor sirva resoluciones de escritorio masivas a pantallas móviles pequeñas.


3. División e importaciones dinámicas

Para optimizar el peso inicial de la página, divide bibliotecas pesadas o componentes opcionales (como ventanas modales) para que se carguen solo cuando se activen.

import dynamic from 'next/dynamic'

// No incluir este modal en el bundle de carga inicial
const HeavyModal = dynamic(() => import('./HeavyModal'), {
  ssr: false,
})

4. Resumen: Mide, construye, audita

Siempre ejecuta auditorías usando Lighthouse o Chrome DevTools para perfilar los tamaños de los bundles de JavaScript y los tiempos de respuesta del servidor (TTFB). Aprovecha el poder de los Server Components para ofrecer experiencias de usuario optimizadas y rápidas.