Volver al blog

Edge Computing con Node.js: El Futuro del Rendimiento Web que Ya Llegó en 2025

Hola HaWkers, edge computing pasó de concepto a realidad mainstream en 2025. Node.js en edge locations entrega latencia <10ms globalmente, corriendo código cerca de los usuarios en 300+ locations. Esto está redefiniendo lo que significa "web rápida".

¿Qué Es Edge Computing?

Edge computing corre código en servidores distribuidos globalmente, cerca de los usuarios finales. En lugar de un servidor central en us-east-1, tu código corre en São Paulo, Tokyo, Londres simultáneamente.

// Tradicional: Servidor central
const traditionalSetup = {
  server: 'us-east-1 (Virginia)',
  userInBrazil: {
    latency: '150-250ms',
    hops: 'Brasil → Miami → Virginia → Miami → Brasil'
  },
  userInJapan: {
    latency: '200-300ms',
    hops: 'Japan → California → Virginia → ...'
  }
};

// Edge: Distribuido globalmente
const edgeSetup = {
  locations: '300+ worldwide',
  userInBrazil: {
    latency: '<10ms',
    server: 'São Paulo edge location'
  },
  userInJapan: {
    latency: '<10ms',
    server: 'Tokyo edge location'
  }
};

// Resultado: ¡20-30x reducción en latencia!

Plataformas Edge en 2025

1. Cloudflare Workers

// Worker corriendo en 300+ locations
export default {
  async fetch(request) {
    const url = new URL(request.url);

    // Geolocation automática
    const country = request.cf.country;
    const city = request.cf.city;

    // KV storage en edge
    const cache = await EDGE_KV.get(`page:${url.pathname}`);

    if (cache) {
      return new Response(cache, {
        headers: {
          'content-type': 'text/html',
          'x-edge-location': city,
          'x-cache': 'HIT'
        }
      });
    }

    // Fetch de origin solo si necesario
    const response = await fetch(url);
    const html = await response.text();

    // Cache en edge
    await EDGE_KV.put(`page:${url.pathname}`, html, {
      expirationTtl: 3600
    });

    return new Response(html, {
      headers: {
        'x-edge-location': city,
        'x-cache': 'MISS'
      }
    });
  }
};

// Deploy: wrangler publish
// Resultado: <10ms latencia global

2. Vercel Edge Functions

// Edge function con geolocation
export const config = {
  runtime: 'edge'
};

export default async function handler(req) {
  const { geo } = req;

  // Personaliza contenido por región
  const content = await getRegionalContent(geo.country);

  // A/B testing en edge
  const variant = Math.random() < 0.5 ? 'A' : 'B';

  return new Response(
    JSON.stringify({
      content,
      variant,
      location: geo.city,
      latency: '<10ms'
    }),
    {
      headers: {
        'content-type': 'application/json',
        'x-edge-region': geo.country
      }
    }
  );
}

// Deploy: vercel --prod
// Corre en Vercel Edge Network

3. Deno Deploy

// Deno Deploy - TypeScript nativo en edge
import { serve } from 'https://deno.land/std@0.177.0/http/server.ts';

serve(async (req) => {
  const start = Date.now();

  // Deno KV en edge
  const kv = await Deno.openKv();
  const cached = await kv.get(['cache', req.url]);

  if (cached.value) {
    return new Response(cached.value as string, {
      headers: {
        'x-cache': 'HIT',
        'x-latency': `${Date.now() - start}ms`
      }
    });
  }

  const response = await processRequest(req);
  await kv.set(['cache', req.url], response, {
    expireIn: 3600000 // 1 hora
  });

  return new Response(response, {
    headers: {
      'x-cache': 'MISS',
      'x-latency': `${Date.now() - start}ms`
    }
  });
});

// Deploy: deployctl deploy
// Global edge deployment

Casos de Uso Perfectos para Edge

1. Personalización por Geolocalización

// Detecta localización y personaliza
export default async function handler(req) {
  const { country, city } = req.geo;

  // Moneda local
  const currency = getCurrencyForCountry(country);

  // Idioma preferido
  const language = getLanguageForCountry(country);

  // Productos disponibles en la región
  const products = await getRegionalProducts(country);

  return Response.json({
    currency,
    language,
    products,
    message: `Personalizado para ${city}, ${country}`
  });
}

2. A/B Testing sin Latencia

// A/B test decisions en edge = zero latency
export default function handler(req) {
  const userId = req.headers.get('x-user-id');

  // Consistent variant per user
  const variant = hashUserId(userId) % 2 === 0 ? 'A' : 'B';

  // Log para analytics (async, no bloquea)
  logVariantAssignment(userId, variant);

  return Response.json({
    variant,
    features: getFeatureFlags(variant)
  });
}

3. Authentication en Edge

// JWT validation en edge
import { verify } from 'jose';

export default async function handler(req) {
  const token = req.headers.get('authorization')?.split(' ')[1];

  if (!token) {
    return new Response('Unauthorized', { status: 401 });
  }

  try {
    // Valida JWT en edge
    const { payload } = await verify(token, SECRET);

    // Agrega user info al request
    const modifiedReq = new Request(req.url, {
      headers: {
        ...req.headers,
        'x-user-id': payload.sub,
        'x-user-role': payload.role
      }
    });

    // Forward a origin
    return fetch(ORIGIN_URL, modifiedReq);
  } catch {
    return new Response('Invalid token', { status: 401 });
  }
}

4. Image Optimization en Edge

// Resize/optimize images on-the-fly
export default async function handler(req) {
  const url = new URL(req.url);
  const width = url.searchParams.get('w') || '800';
  const quality = url.searchParams.get('q') || '80';

  // Fetch imagen original
  const imageReq = await fetch(url.pathname);
  const image = await imageReq.arrayBuffer();

  // Resize en edge (¡con WebAssembly!)
  const resized = await resizeImage(image, {
    width: parseInt(width),
    quality: parseInt(quality)
  });

  return new Response(resized, {
    headers: {
      'content-type': 'image/jpeg',
      'cache-control': 'public, max-age=31536000',
      'x-processed-at': 'edge'
    }
  });
}

Limitaciones y Consideraciones

const edgeLimitations = {
  cpuTime: 'Limitado (50-100ms típico)',
  memory: 'Restringido (128MB típico)',
  coldStart: 'Prácticamente zero, pero existe',
  statefulness: 'Difícil - edge es stateless',
  debugging: 'Más complejo que tradicional',
  cost: 'Puede ser mayor para alto tráfico'
};

// Cuándo NO usar edge:
const avoidEdgeFor = [
  'Procesamiento CPU intensivo',
  'Aplicaciones stateful complejas',
  'WebSocket de larga duración',
  'Operaciones que requieren >100ms CPU'
];

Rendimiento Real: Antes y Después

const realWorldImpact = {
  ecommerce: {
    before: 'TTFB 200ms, Core Web Vitals: Poor',
    after: 'TTFB 10ms, Core Web Vitals: Good',
    result: '+15% conversion rate'
  },
  media: {
    before: 'First paint 1.2s',
    after: 'First paint 0.3s',
    result: '+30% engagement'
  },
  api: {
    before: 'p99 latency 500ms',
    after: 'p99 latency 50ms',
    result: 'Better UX, lower costs'
  }
};

Edge computing con Node.js está redefiniendo rendimiento web en 2025. <10ms latencia global ya no es ciencia ficción - es realidad disponible hoy. Si estás construyendo para la web, edge debe estar en tu radar. Para más sobre Node.js moderno, ve: Serverless en 2025: Cómo Node.js Domina.

¡Vamos a por ello! 🦅

Únete a los Desarrolladores que Están Evolucionando

Edge computing está construido sobre JavaScript/Node.js. Dominar fundamentos es esencial para aprovechar esta revolución de rendimiento.

Comienza ahora:

  • $9.90 USD (pago único)

Acceder a Guía Completo

Comentarios (0)

Este artículo aún no tiene comentarios 😢. ¡Sé el primero! 🚀🦅

Añadir comentarios