Voltar para o Blog
Anúncio

Edge Computing com Node.js: O Futuro da Performance Web que Já Chegou em 2025

Olá HaWkers, edge computing passou de conceito para realidade mainstream em 2025. Node.js em edge locations entrega latência <10ms globalmente, rodando código próximo aos usuários em 300+ locations. Isso está redefinindo o que significa "web rápida".

O Que É Edge Computing?

Edge computing roda código em servidores distribuídos globalmente, próximos aos usuários finais. Ao invés de um servidor central em us-east-1, seu código roda em São Paulo, Tokyo, Londres simultaneamente.

// 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: Distribuído 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 redução em latência!
Anúncio

Plataformas Edge em 2025

1. Cloudflare Workers

// Worker rodando em 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 na 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 apenas se necessário
    const response = await fetch(url);
    const html = await response.text();

    // Cache na 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 latência global

2. Vercel Edge Functions

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

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

  // Personaliza conteúdo por região
  const content = await getRegionalContent(geo.country);

  // A/B testing na 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
// Roda em Vercel Edge Network

3. Deno Deploy

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

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

  // Deno KV na 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
Anúncio

Casos de Uso Perfeitos para Edge

1. Personalização por Geolocalização

// Detecta localização e personaliza
export default async function handler(req) {
  const { country, city } = req.geo;

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

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

  // Produtos disponíveis na região
  const products = await getRegionalProducts(country);

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

2. A/B Testing sem Latência

// A/B test decisions na 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, não bloqueia)
  logVariantAssignment(userId, variant);

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

3. Authentication na Edge

// JWT validation na 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 na edge
    const { payload } = await verify(token, SECRET);

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

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

4. Image Optimization na 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 imagem original
  const imageReq = await fetch(url.pathname);
  const image = await imageReq.arrayBuffer();

  // Resize na edge (com 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'
    }
  });
}
Anúncio

Limitações e Considerações

const edgeLimitations = {
  cpuTime: 'Limitado (50-100ms típico)',
  memory: 'Restrito (128MB típico)',
  coldStart: 'Praticamente zero, mas existe',
  statefulness: 'Difícil - edge é stateless',
  debugging: 'Mais complexo que tradicional',
  cost: 'Pode ser maior para alto tráfego'
};

// Quando NÃO usar edge:
const avoidEdgeFor = [
  'Processamento CPU intensivo',
  'Aplicações stateful complexas',
  'WebSocket de longa duração',
  'Operações que requerem >100ms CPU'
];

Performance Real: Antes e Depois

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 com Node.js está redefinindo performance web em 2025. <10ms latência global não é mais ficção científica - é realidade disponível hoje. Se você está construindo para a web, edge deve estar no seu radar. Para mais sobre Node.js moderno, veja: Serverless em 2025: Como Node.js Domina.

Bora pra cima! 🦅

🎯 Junte-se aos Desenvolvedores que Estão Evoluindo

Edge computing é construído sobre JavaScript/Node.js. Dominar fundamentos é essencial para aproveitar essa revolução de performance.

Comece agora:

  • 3x de R$34,54 no cartão
  • ou R$97,90 à vista

🚀 Acessar Guia Completo

Anúncio
Post anteriorPróximo post

Comentários (0)

Esse artigo ainda não possui comentários 😢. Seja o primeiro! 🚀🦅

Adicionar comentário