Parte da nossa série Performance & Scalability
Leia o guia completoOtimização de desempenho de CDN: o guia completo para entrega global mais rápida
Cada 100 ms de melhoria na latência aumenta as taxas de conversão de comércio eletrônico em 1,1%. Para uma loja que fatura US$ 1 milhão por mês, essa melhoria de 100 ms se traduz em US$ 132.000 por ano em receita adicional. A otimização de CDN não é uma vantagem técnica – é uma alavanca direta de receita.
Este guia aborda arquitetura CDN, estratégias de cache, computação de ponta e ajuste de desempenho para aplicativos da web, lojas de comércio eletrônico e sistemas ERP.
Principais conclusões
- Somente cabeçalhos de cache adequados podem reduzir a carga do servidor de origem em 60-80%
- A otimização de imagem por meio de transformações CDN reduz o peso da página em 40-60% sem nenhuma alteração de código
- A computação de borda aproxima a lógica da API dos usuários, reduzindo a latência de 200 ms para 20 ms para respostas em cache
- Estratégias multi-CDN fornecem failover e otimização geográfica para públicos globais
Fundamentos da arquitetura CDN
Como funcionam os CDNs
Uma CDN é uma rede de servidores distribuídos globalmente que armazenam em cache e servem conteúdo de locais mais próximos do usuário.
User in Tokyo --> CDN Edge (Tokyo, 5ms) --> [Cache HIT] --> Response
User in London --> CDN Edge (London, 5ms) --> [Cache MISS] --> Origin (US-East, +120ms) --> Cache + Response
User in London --> CDN Edge (London, 5ms) --> [Cache HIT] --> Response (subsequent requests)
O que armazenar em cache
| Tipo de conteúdo | Duração do Cache | Cabeçalho de controle de cache |
|---|---|---|
| Ativos estáticos (JS, CSS) | 1 ano (imutável) | CÓDIGO0 |
| Imagens | 30 dias | CÓDIGO0 |
| Fontes | 1 ano | CÓDIGO0 |
| Páginas HTML (estáticas) | 5 minutos | CÓDIGO0 |
| Respostas da API (públicas) | 1-5 minutos | CÓDIGO0 |
| Respostas da API (privadas) | Não armazene em cache | CÓDIGO0 |
Cabeçalhos de controle de cache
Configuração de cache Next.js
// next.config.ts
const nextConfig = {
async headers() {
return [
{
source: '/_next/static/:path*',
headers: [
{
key: 'Cache-Control',
value: 'public, max-age=31536000, immutable',
},
],
},
{
source: '/images/:path*',
headers: [
{
key: 'Cache-Control',
value: 'public, max-age=2592000',
},
],
},
];
},
};
Cabeçalhos de cache Nginx
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
expires 365d;
add_header Cache-Control "public, immutable";
add_header Vary "Accept-Encoding";
}
location ~* \.html$ {
expires 5m;
add_header Cache-Control "public, must-revalidate";
}
# API responses - let the application control caching
location /api/ {
proxy_pass http://backend;
proxy_cache_bypass $http_authorization;
}
Otimização de imagem
As imagens representam 50-70% do peso da página na maioria dos sites. A otimização de imagem baseada em CDN elimina a necessidade de processamento de imagem em tempo de construção.
Transformações de imagem Cloudflare
<!-- Original: 2.4 MB JPEG -->
<!-- Optimized: 180 KB WebP, properly sized -->
<img
src="/cdn-cgi/image/width=800,quality=80,format=auto/images/product-hero.jpg"
alt="Product"
width="800"
height="600"
loading="lazy"
/>
Componente de imagem Next.js com CDN
// next.config.ts
const nextConfig = {
images: {
loader: 'custom',
loaderFile: './lib/image-loader.ts',
},
};
// lib/image-loader.ts
export default function cloudflareLoader({
src,
width,
quality,
}: {
src: string;
width: number;
quality?: number;
}) {
const params = [`width=${width}`, `quality=${quality || 80}`, 'format=auto'];
return `/cdn-cgi/image/${params.join(',')}${src}`;
}
Impacto na otimização de imagem
| Métrica | Antes da otimização do CDN | Após a otimização do CDN |
|---|---|---|
| Tamanho médio da imagem | 850 KB | 120 KB |
| Peso da página (imagens) | 4,2 MB | 680 KB |
| LCP (Maior Pintura com Conteúdo) | 3,8s | 1,4s |
| Tempo total de carregamento da página | 5,2s | 2,1s |
Computação de borda
Trabalhadores Cloudflare para cache de API
// worker.js - Cache API responses at the edge
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
const url = new URL(request.url);
// Only cache GET requests to public API endpoints
if (request.method !== 'GET' || !url.pathname.startsWith('/api/public/')) {
return fetch(request);
}
const cache = caches.default;
const cacheKey = new Request(url.toString(), request);
// Check cache
let response = await cache.match(cacheKey);
if (response) {
return response;
}
// Fetch from origin
response = await fetch(request);
// Clone and cache successful responses
if (response.ok) {
const cachedResponse = new Response(response.body, response);
cachedResponse.headers.set('Cache-Control', 'public, max-age=300');
cachedResponse.headers.set('X-Cache-Status', 'MISS');
event.waitUntil(cache.put(cacheKey, cachedResponse.clone()));
return cachedResponse;
}
return response;
}
Casos de uso extremos para comércio eletrônico
| Caso de uso | Melhoria de latência | Implementação |
|---|---|---|
| API do catálogo de produtos | 200ms a 5ms | Cache na borda por 5 minutos |
| Redirecionamento de geolocalização | 100ms a 1ms | Trabalhador de borda com pesquisa de IP |
| Teste A/B | 50ms a 0ms | Trabalhador de borda atribui variante |
| Detecção de bots | 100ms a 5ms | Desafio de borda antes da origem |
| Localização de preços | 150ms a 5ms | Trabalhador de ponta com conversão de moeda |
Comparação de provedores de CDN
| Recurso | nuvemflare | AWS CloudFront | Rapidamente | Coelho CDN |
|---|---|---|---|---|
| PoPs globais | 310+ | 450+ | 80+ | 114+ |
| Nível gratuito | Generoso | 1 TB/mês (12 meses) | Nenhum | Nenhum |
| Computação de borda | Trabalhadores | Lambda@Edge | Computação@Edge | Script de borda |
| Otimização de imagem | Integrado | Requer Lambda | Integrado | Integrado |
| Suporte WebSocket | Sim | Sim | Sim | Sim |
| Proteção DDoS | Incluído | Escudo AWS (extra) | Incluído | Básico |
| Preço inicial | Grátis | Pagamento conforme uso | US$ 50/mês | US$ 1/mês |
Recomendação: Cloudflare para a maioria das empresas. O nível gratuito é generoso, a rede de borda é a maior e os Workers fornecem computação de ponta poderosa sem infraestrutura adicional.
Estratégias Multi-CDN
Por que Multi-CDN
Nenhuma CDN tem o melhor desempenho em todas as regiões. Uma estratégia multi-CDN direciona os usuários para a CDN de melhor desempenho para sua localização:
| Abordagem | Complexidade | Custo | Benefício |
|---|---|---|---|
| Primário + failover | Baixo | 1,1x | Confiabilidade |
| Roteamento geográfico | Médio | 1,3x | Otimização de latência |
| Roteamento baseado em desempenho | Alto | 1,5x | Melhor latência possível |
Implementação
Use o roteamento em nível de DNS para direcionar os usuários ao CDN ideal:
User request -> DNS (Cloudflare/Route53)
|
+--> US/EU traffic -> Cloudflare (best PoP coverage)
|
+--> APAC traffic -> AWS CloudFront (strong APAC presence)
|
+--> China traffic -> Alibaba CDN (required for China performance)
Para a maioria das empresas, um único CDN (Cloudflare) com um CDN de failover configurado no nível DNS fornece redundância suficiente sem a complexidade do roteamento multi-CDN completo.
Armadilhas comuns do CDN
Armadilha 1: Armazenamento em cache de conteúdo autenticado
Nunca armazene em cache respostas que contenham dados específicos do usuário. Uma resposta em cache do Usuário A servida ao Usuário B é uma violação de segurança. Use Cache-Control: private, no-store para todas as respostas autenticadas da API.
Armadilha 2: Ignorar o impedimento de cache para implantações
Ao implantar um novo JavaScript ou CSS, os usuários poderão receber versões antigas armazenadas em cache. Soluções:
- Hashing de conteúdo: inclua um hash no nome do arquivo (
app.a1b2c3d4.js). Next.js faz isso automaticamente. - Limpeza de cache na implantação: limpe o cache da CDN como parte do pipeline de implantação.
- URLs versionados:
/v2/styles.cssem vez de/styles.css.
Armadilha 3: Configuração incorreta de CDN para conteúdo dinâmico
Se sua CDN armazenar em cache conteúdo dinâmico que não deveria ser armazenado em cache (respostas de API, páginas HTML com estado do usuário), você fornecerá dados desatualizados ou incorretos. Audite regularmente as regras de cache do CDN e use cabeçalhos Vary para evitar conflitos de cache.
Medição de desempenho
Principais metas vitais da Web
| Métrica | Bom | Precisa de melhorias | Pobre |
|---|---|---|---|
| LCP (Maior Pintura com Conteúdo) | <2,5s | 2,5-4,0s | >4,0s |
| INP (Interação com Próxima Pintura) | <200ms | 200-500ms | >500ms |
| CLS (mudança cumulativa de layout) | <0,1 | 0,1-0,25 | >0,25 |
Monitorando o desempenho do cache
# Check CDN cache hit ratio
curl -sI https://example.com/page | grep -i "cf-cache-status\|x-cache\|age"
# Expected output for a cached response:
# cf-cache-status: HIT
# age: 3600
Acompanhe a taxa de acertos do cache ao longo do tempo. Meta: acima de 85% para ativos estáticos, acima de 50% para conteúdo dinâmico.
Perguntas frequentes
Precisamos de uma CDN se nossos usuários estiverem em um país?
Sim, mas os benefícios mudam. Em vez de redução da latência geográfica, você ganha: proteção DDoS, descarregamento de terminação SSL, otimização de imagem e redução de carga do servidor de origem. Mesmo para públicos de um único país, uma CDN reduz os custos do servidor e melhora a confiabilidade. O nível gratuito da Cloudflare torna isso uma melhoria sem custo.
Como lidamos com a invalidação de cache para conteúdo dinâmico?
Três estratégias: (1) TTLs curtos (1-5 minutos) para conteúdo que muda com frequência, (2) tags de cache com eliminação por tag para atualizações de conteúdo, (3) cabeçalhos obsoletos enquanto revalidam que servem conteúdo em cache enquanto busca conteúdo novo em segundo plano. Use s-maxage para cache CDN e max-age para cache do navegador de forma independente.
Devemos usar um CDN para nosso sistema ERP?
CDN é benéfico para ativos estáticos de ERP (JavaScript, CSS, imagens) e portais públicos. Não armazene em cache respostas de API autenticadas ou conteúdo dependente de sessão. ECOSIRE configura o cache CDN como parte de nossos serviços de implementação Odoo para garantir o cache ideal sem riscos de segurança.
Como o CDN interage com a renderização do lado do servidor?
Para páginas SSR Next.js, configure o CDN para armazenar em cache com base na URL completa (incluindo parâmetros de consulta) com TTLs curtos (1 a 5 minutos). Use stale-while-revalidate para fornecer conteúdo ligeiramente desatualizado enquanto Next.js é regenerado em segundo plano. ISR (Regeneração Estática Incremental) funciona naturalmente com cache CDN.
O que vem a seguir
A otimização de CDN combina naturalmente com teste de carga para validar o desempenho sob carga e monitoramento para rastrear taxas de acertos de cache e latência. Para obter o roteiro completo de otimização da infraestrutura, consulte nosso guia DevOps para pequenas empresas.
Entre em contato com a ECOSIRE para configuração de CDN e consultoria de otimização de desempenho.
Publicado pela ECOSIRE – ajudando as empresas a fornecer conteúdo com mais rapidez em todo o mundo.
Escrito por
ECOSIRE Research and Development Team
Construindo produtos digitais de nível empresarial na ECOSIRE. Compartilhando insights sobre integrações Odoo, automação de e-commerce e soluções de negócios com IA.
Artigos Relacionados
Otimização do desempenho do agente de IA: velocidade, precisão e eficiência de custos
Otimize o desempenho do agente de IA em termos de tempo de resposta, precisão e custo com técnicas comprovadas para engenharia imediata, armazenamento em cache, seleção de modelo e monitoramento.
IA para otimização de estoque: reduza rupturas de estoque e reduza custos de manutenção
Implemente a otimização de estoque baseada em IA para reduzir as rupturas de estoque em 30-50% e reduzir os custos de manutenção em 15-25%. Abrange previsão de demanda, estoque de segurança e lógica de reabastecimento.
Otimização de preços baseada em IA: preços dinâmicos que maximizam a receita
Implemente a otimização de preços de IA para preços dinâmicos, modelagem de elasticidade de preços, monitoramento competitivo e maximização de margem em todos os canais.
Mais de Performance & Scalability
Otimização do desempenho do agente de IA: velocidade, precisão e eficiência de custos
Otimize o desempenho do agente de IA em termos de tempo de resposta, precisão e custo com técnicas comprovadas para engenharia imediata, armazenamento em cache, seleção de modelo e monitoramento.
Teste e monitoramento de agentes de IA: engenharia de confiabilidade para sistemas autônomos
Guia completo para testar e monitorar agentes de IA, abrangendo testes unitários, testes de integração, testes comportamentais, observabilidade e estratégias de monitoramento de produção.
Estratégias de teste de carga para aplicativos da Web: encontre pontos de ruptura antes que os usuários o façam
Carregue aplicativos da web de teste com k6, Artillery e Locust. Abrange design de teste, modelagem de tráfego, linhas de base de desempenho e estratégias de interpretação de resultados.
SEO móvel para comércio eletrônico: guia completo de otimização para 2026
Guia de SEO móvel para sites de comércio eletrônico. Abrange indexação que prioriza dispositivos móveis, Core Web Vitals, dados estruturados, otimização de velocidade de página e fatores de classificação de pesquisa para dispositivos móveis.
Monitoramento e alertas de produção: o guia completo de configuração
Configure monitoramento e alertas de produção com Prometheus, Grafana e Sentry. Abrange métricas, logs, rastreamentos, políticas de alerta e fluxos de trabalho de resposta a incidentes.
Desempenho da API: limitação de taxa, paginação e processamento assíncrono
Crie APIs de alto desempenho com algoritmos de limitação de taxa, paginação baseada em cursor, filas de tarefas assíncronas e práticas recomendadas de compactação de resposta.