Next.js 16: Las Features que el 90% de Developers Todavía No Entienden

Next.js 16: Las Features que el 90% de Developers Todavía No Entienden

Programming· 5 min read

La Mayoría Usa Next.js 16 Como Si Fuera Next.js 12

Tienes el App Router configurado. Usas Server Components. Haces fetch con cache: 'no-store' en todos lados.

Y sigues sin entender por qué tu app es lenta.

El problema real con Next.js 16 no son las features. Es que sigues pensando en páginas cuando deberías pensar en capas de renderizado.

Next.js 16 introduce un modelo de ejecución donde cada parte de tu UI puede tener su propia estrategia de renderizado. No toda la página. Cada componente.

Eso lo cambia todo. Y casi nadie lo usa bien.

---

El Error de Arquitectura que Anula Next.js 16

El error más común que veo en proyectos reales:

Lo que hace la mayoría:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Tres awaits secuenciales. Tu TTFB explota. El usuario ve una pantalla en blanco mientras tu servidor espera tres llamadas a la base de datos una detrás de otra.

Lo que deberías hacer con Next.js 16:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

El servidor empieza a enviar HTML inmediatamente. Cada sección llega cuando está lista. Tu TTFB cae en picado.

Esto no es nuevo en React. Pero Next.js 16 lo hace por defecto cuando activas PPR.

---

Partial Prerendering: El Concepto que Nadie Explica Bien

PPR no es prerenderizado parcial en el sentido clásico. No es que renderices algunas páginas y otras no.

El verdadero PPR es una composición de HTML estático y huecos dinámicos en la misma respuesta.

Vercel lo llama el "shell estático". La idea:

→ Next.js prerenderiza el esqueleto de tu página en build time

↳ Los huecos dinámicos se rellenan en runtime vía streaming

El resultado: el navegador recibe HTML útil en milisegundos, sin esperar datos.

Cómo activar PPR en Next.js 16

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Después, en cada página que quieras PPR:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Tu ProductHeader y ProductDescription salen del CDN en microsegundos. El precio en tiempo real llega después, sin bloquear la primera pintura.

Este es el patrón que separa las apps rápidas de las apps que solo parecen modernas.

---

Async Request APIs: El Cambio que Rompe Tu Código Antiguo

Next.js 16 convirtió cookies(), headers(), params y searchParams en APIs asíncronas.

Aquí está el porqué: en el modelo anterior, estas APIs eran síncronas pero dependían del contexto de la request. Eso creaba un acoplamiento implícito que impedía al runtime optimizar el renderizado.

Next.js 15 y anterior:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Next.js 16:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

El cambio parece cosmético. No lo es.

Al hacer estas APIs asíncronas, Next.js puede diferir la lectura de la request hasta que sea necesario. Eso permite que el runtime empiece a renderizar partes estáticas de tu página antes de leer las cookies o headers.

Si migras un proyecto grande de Next.js 15 a 16 y no actualizas esto, tu build falla. El codemod oficial hace la mayor parte del trabajo:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Ejecútalo primero. Revisa después.

---

Turbopack en Producción: Lo que Nadie Te Cuenta

Turbopack alcanzó paridad completa con webpack en Next.js 16. Eso significa que puedes usarlo en producción sin sorpresas.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

El real beneficio de Turbopack no es la velocidad en builds grandes. Es la consistencia en la experiencia de desarrollo.

Con webpack, tu HMR se degradaba a medida que el proyecto crecía. Un proyecto con 300 componentes tardaba varios segundos en actualizar.

Con Turbopack, el HMR opera sobre el grafo incremental. Solo recompila lo que cambió y sus dependencias directas. El tiempo de actualización no escala con el tamaño del proyecto.

Lo que debes verificar antes de migrar

Algunos loaders de webpack no tienen equivalente directo en Turbopack. Verifica tu next.config.ts:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

La documentación oficial tiene la lista actualizada de loaders soportados. Revísala antes de hacer el switch en producción.

---

El Pattern de Arquitectura que Funciona en Next.js 16

Después de ver proyectos en producción con App Router, el patrón que consistentemente da mejor rendimiento es este:

Capa 1: Layout estático

Todo lo que no cambia entre usuarios (navbar, footer, estructura visual) vive en layouts. Next.js los prerenderiza una vez.

Capa 2: Datos compartidos con cache

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Capa 3: Datos por usuario sin cache

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

La separación explícita entre datos estáticos y datos por usuario es lo que hace que PPR funcione correctamente. Si mezclas ambos sin Suspense, PPR no puede hacer su trabajo.

---

Takeaways

PPR no es opcional si construyes apps con datos mixtos. Actívalo con ppr: 'incremental' y envuelve los datos dinámicos en Suspense.

Los Async Request APIs no son un detalle menor. Son el contrato que permite al runtime optimizar el renderizado antes de leer la request.

Turbopack en producción ya está listo. Pero verifica tus loaders de webpack antes de migrar.

El error de arquitectura más caro en Next.js 16 es mezclar datos estáticos y dinámicos sin separación explícita. PPR lo penaliza directamente.

Los awaits secuenciales en Server Components son el antipatrón más común. Cada componente debería ser responsable de sus propios datos.

Next.js 16 no te hace más rápido automáticamente. Te da las herramientas para ser más rápido si entiendes el modelo de renderizado. Los developers que dominen PPR, streaming y la separación estático/dinámico construirán apps que el resto no puede replicar copiando código.

Artículos relacionados

---

¿Quieres recibir contenido como este cada semana? Suscríbete a mi newsletter

Brian Mena

Brian Mena

Software engineer building profitable digital products: SaaS, directories and AI agents. All from scratch, all in production.

LinkedIn