Entornos de ejecución Edge y Node.js

En el contexto de Next.js, el entorno de ejecución (runtime) se refiere al conjunto de bibliotecas, APIs y funcionalidad general disponible para tu código durante la ejecución.

En el servidor, hay dos entornos de ejecución donde partes del código de tu aplicación pueden renderizarse:

  • El Entorno Node.js (predeterminado) tiene acceso a todas las APIs de Node.js y paquetes compatibles del ecosistema.
  • El Entorno Edge está basado en APIs Web.

Diferencias entre entornos de ejecución

Hay muchas consideraciones al elegir un entorno de ejecución. Esta tabla muestra las principales diferencias de un vistazo. Para un análisis más detallado, consulta las secciones siguientes.

Node.jsServerlessEdge
Arranque en frío/NormalBajo
Streaming HTTP
E/STodasTodasfetch
Escalabilidad/AltaMáxima
SeguridadNormalAltaAlta
LatenciaNormalBajaMínima
Paquetes npmTodosTodosUn subconjunto
Renderizado estáticoNo
Renderizado dinámico
Revalidación de datos con fetch

Entorno Edge

En Next.js, el ligero entorno Edge es un subconjunto de las APIs disponibles de Node.js.

El entorno Edge es ideal si necesitas entregar contenido dinámico y personalizado con baja latencia usando funciones pequeñas y simples. La velocidad del entorno Edge proviene de su uso mínimo de recursos, pero esto puede ser limitante en muchos escenarios.

Por ejemplo, el código ejecutado en el entorno Edge en Vercel no puede exceder entre 1 MB y 4 MB, este límite incluye paquetes importados, fuentes y archivos, y variará según tu infraestructura de despliegue. Además, el entorno Edge no soporta todas las APIs de Node.js, lo que significa que algunos paquetes npm pueden no funcionar. Por ejemplo, errores como "Module not found: Can't resolve 'fs'" o similares. Recomendamos usar el entorno Node.js si necesitas usar estas APIs o paquetes.

Entorno Node.js

Usar el entorno Node.js te da acceso a todas las APIs de Node.js y todos los paquetes npm que dependen de ellas. Sin embargo, no arranca tan rápido como las rutas que usan el entorno Edge.

Desplegar tu aplicación Next.js en un servidor Node.js requerirá gestionar, escalar y configurar tu infraestructura. Alternativamente, puedes considerar desplegar tu aplicación Next.js en una plataforma serverless como Vercel, que manejará esto por ti.

Node.js Serverless

Serverless es ideal si necesitas una solución escalable que pueda manejar cargas computacionales más complejas que el entorno Edge. Con Funciones Serverless en Vercel, por ejemplo, el tamaño total de tu código es 50MB incluyendo paquetes importados, fuentes y archivos.

La desventaja comparado con rutas que usan Edge es que las Funciones Serverless pueden tardar cientos de milisegundos en arrancar antes de comenzar a procesar solicitudes. Dependiendo del tráfico que reciba tu sitio, esto podría ocurrir con frecuencia ya que las funciones no siempre están "calientes".

Consulta la documentación de Node.js y la documentación Edge para ver la lista completa de APIs disponibles. Ambos entornos también pueden soportar streaming dependiendo de tu infraestructura de despliegue.