Vercel vs Cloudflare (Workers + Pages) Comparación

El origen de Next.js — despliega las funciones más nuevas sin demora y con configuración cero

VS
Cloudflare (Workers + Pages)

Red global de isolates V8 — egress cero, ahora con su propia capa Next.js llamada vinext

15 min de lecturaDevOps

Veredicto rápido

Depende del escenario. Si quieres las funciones más nuevas de Next.js sin demora, elige Vercel — riesgo de paridad cero. Si tu proyecto tiene mucho ancho de banda, alcance global y priorizas la previsibilidad de costes, Cloudflare es la apuesta correcta; junto a OpenNext ahora también está vinext, todavía en beta pero en rápido desarrollo. En trabajo crítico empieza con OpenNext, y prueba vinext en un proyecto nuevo.

VercelCloudflare (Workers + Pages)
Leer el veredicto completo

Comparación de puntuaciones

Cargando gráfico...

Puntuación detallada

Puntuación detallada: Vercel y Cloudflare (Workers + Pages) — puntuaciones por categoría sobre 10
CategoríaVercelCloudflare (Workers + Pages)
Rendimiento
8/10
9/10
Facilidad de aprendizaje
9/10
6/10
Ecosistema
9/10
7/10
Comunidad
9/10
8/10
Mercado laboral
8/10
7/10
A prueba de futuro
8/10
8/10

Pros y contras

Vercel

Pros

  • Al ser la empresa que desarrolla Next.js, las funciones nuevas (PPR, Turbopack, App Router) maduran aquí primero
  • Despliegue de configuración cero — basta con git push, build/ISR/edge middleware se configuran automáticamente
  • 126 PoP / 51 países de CDN + 20 regiones con capacidad de cómputo para SSR de baja latencia
  • Facturación de Active CPU con Fluid Compute — la facturación se detiene durante I/O en espera
  • Preview deployments automáticos en cada PR, integrados de forma natural en el flujo de trabajo del equipo
  • Las Cache API oficiales de Next.js (revalidateTag, revalidatePath) tienen soporte de primera mano

Contras

  • Fast Data Transfer $0,15/GB (el primer 1TB incluido en Pro) — el coste se dispara rápido en sitios con mucho ancho de banda
  • Sin base de datos relacional/vectorial nativa; aparte de Blob Storage, los datos dependen de proveedores externos (Marketplace)
  • SAML SSO es un complemento aparte en Pro ($300/mes); Directory Sync (SCIM) solo en el plan Enterprise
  • El número de PoP edge (126) es más limitado que la huella global de Cloudflare
  • El modelo de precios basado en funciones puede resultar más caro que Workers en sitios con muchas solicitudes y poca CPU

Ideal para

Equipos que quieren usar las funciones más nuevas de Next.js (PPR, Turbopack, Cache API) sin demoraStartups y agencias que iteran rápido con cero DevOpsEquipos de producto que quieren un flujo de trabajo basado en preview deploymentsAplicaciones SSR intensivas en CPU pero de tráfico moderado

Cloudflare (Workers + Pages)

Pros

  • Sin coste de egress/ancho de banda — solo se facturan solicitudes ($0,30/millón adicional) y CPU-time ($0,02/millón de CPU-ms adicional)
  • El 95% de la red está a 50ms de la población de internet — cobertura geográfica muy amplia
  • La arquitectura de isolates V8 tiene un arranque en frío estructuralmente más ligero que las funciones basadas en contenedores
  • Con vinext, ~94% de la superficie de la API de Next.js 16 ya está soportada mediante una reimplementación propia
  • KV, R2, D1, Hyperdrive y Durable Objects permiten mantener los datos en la misma red edge
  • Con Access for Workers (ago. 2026) la política de identidad se vincula directamente al Worker, sin importar la ruta o la URL de preview

Contras

  • vinext está en beta — se recomienda ejecutar `npx vinext check` antes de adoptarlo; el repositorio de GitHub aún indica que no sustituye uno a uno cualquier carga de trabajo de producción
  • El backend de caché R2 del adaptador OpenNext para ISR+PPR tiene riesgo de obsolescencia tras ~24 horas (Issue #662; reportado con la v1.0.2 del adaptador, sigue abierto)
  • La optimización de next/image solo se soporta parcialmente — algunos escenarios requieren configuración adicional
  • Al no ser el origen de Next.js, las funciones nuevas del framework llegan con retraso respecto a Vercel
  • El modelo de tarifa base de $5/mes + solicitudes/CPU-time reduce la previsibilidad en aplicaciones de bajo tráfico pero intensivas en CPU
  • La capa OpenNext/vinext añade carga operativa adicional (actualizaciones del adaptador, elección del backend de caché)

Ideal para

Sitios con mucho ancho de banda (contenido visual/vídeo/APIs intensivas) — el coste es previsible al no cobrar egressAplicaciones con base de usuarios global y multirregionalEquipos que prefieren una capa de datos de ecosistema único como KV/D1/R2/HyperdriveAplicaciones internas multi-ruta que necesitan una política de identidad/acceso centralizada (Access)

Comparación de código

Vercel
// Vercel — Next.js 16 App Router, Cache Components (PPR por defecto) + purge on-demand
// next.config.ts
import type { NextConfig } from "next";

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

export default nextConfig;

// app/blog/[slug]/page.tsx — datos cacheados con 'use cache' + cacheTag
import { cacheTag } from "next/cache";

async function getPost(slug: string) {
  "use cache";
  cacheTag(`post-${slug}`);
  const res = await fetch(`https://api.example.com/posts/${slug}`);
  return res.json();
}

export default async function BlogPost({
  params,
}: {
  params: Promise<{ slug: string }>;
}) {
  const { slug } = await params;
  const post = await getPost(slug);

  return (
    <article>
      <h1>{post.title}</h1>
      <div dangerouslySetInnerHTML={{ __html: post.html }} />
    </article>
  );
}

// app/api/revalidate/route.ts — purge on-demand (Vercel Data Cache)
// "max" = stale-while-revalidate; para invalidar al instante en un webhook usa { expire: 0 }
import { revalidateTag } from "next/cache";
import { NextRequest, NextResponse } from "next/server";

export async function POST(req: NextRequest) {
  const { slug } = await req.json();
  revalidateTag(`post-${slug}`, "max");
  return NextResponse.json({ revalidated: true });
}

// vercel.json — preferencia de región y duración de la función
{
  "regions": ["fra1"],
  "functions": {
    "app/api/revalidate/route.ts": { "maxDuration": 10 }
  }
}

// Deploy
// $ vercel --prod
Cloudflare (Workers + Pages)
// Cloudflare — desplegar Next.js 16 en Workers (vinext, ruta oficial por defecto)
// 1) Primero mide la compatibilidad, luego añádelo al proyecto (vinext init genera la config de Vite)
// $ npx vinext check
// $ npx vinext init

// vite.config.ts — caché de Workers para ISR a nivel de ruta, KV para caché de datos
import { cloudflare } from "@cloudflare/vite-plugin";
import { cdnAdapter } from "@vinext/cloudflare/cache/cdn-adapter";
import { kvDataAdapter } from "@vinext/cloudflare/cache/kv-data-adapter";
import { defineConfig } from "vite";
import vinext from "vinext";

export default defineConfig({
  plugins: [
    vinext({
      // cdnAdapter solo funciona si wrangler.jsonc tiene "cache": { "enabled": true }
      cache: { cdn: cdnAdapter(), data: kvDataAdapter() },
    }),
    cloudflare({
      viteEnvironment: { name: "rsc", childEnvironments: ["ssr"] },
    }),
  ],
});

// Deploy — genera la configuración del Worker automáticamente
// $ npx @vinext/cloudflare deploy

// Alternativa: adaptador OpenNext — open-next.config.ts
import { defineCloudflareConfig } from "@opennextjs/cloudflare";
import r2IncrementalCache from "@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache";

export default defineCloudflareConfig({ incrementalCache: r2IncrementalCache });
// $ opennextjs-cloudflare build && opennextjs-cloudflare deploy

// Access for Workers — vincular el Worker a la aplicación Access
// POST /accounts/{account_id}/access/apps
// "destinations": [{ "type": "worker", "worker_id": "<worker-id>" }]

Conclusión

Depende del escenario. Si quieres las funciones más nuevas de Next.js sin demora, elige Vercel — riesgo de paridad cero. Si tu proyecto tiene mucho ancho de banda, alcance global y priorizas la previsibilidad de costes, Cloudflare es la apuesta correcta; junto a OpenNext ahora también está vinext, todavía en beta pero en rápido desarrollo. En trabajo crítico empieza con OpenNext, y prueba vinext en un proyecto nuevo.

Solicita una consultoría gratuita
FAQ

Preguntas frecuentes

No del todo, pero está cerca: la nueva capa vinext de Cloudflare soporta ~94% de la superficie de la API de Next.js 16 (App Router, Server Actions, ISR, middleware) y es la ruta oficial por defecto — pero sigue en beta; la documentación indica ejecutar `npx vinext check` antes de adoptarla en una aplicación de producción existente. El adaptador más maduro `@opennextjs/cloudflare` tiene, en cambio, un problema de obsolescencia en el backend de caché R2 para ISR+Partial Prerendering (issue abierto en GitHub).

Artículos de blog relacionados

Ver todos los artículos

Proyectos relacionados

Ver todos los proyectos
Todas las comparaciones