Como otimizar requests - front e back - para diminuir custos e ganhar performance

← ← ←   9/3/2022, 12:14:53 AM | Posted by: Felippe Regazio


Neste post não pretendo dar dicas de ferramentas, são dicas que podem ser aplicadas em qualquer ferramenta/server/linguagem. Sem mais delongas, vamos ao assunto:

Traga apenas o necessário

Procure não trazer informação que não será imediatamente útil no contexto (ou ao menos não tão logo). Se vc precisa trazer o payload de profile financeiro inteiro pra pegar os 4 primeiro digitos do cartão, crie uma rota /get-card-first-digits

Fique esperto/a se os payloads que vc envia no backend não enviando sujeira (dados inseriros pelo ORM/Framework/DB etc).

Limpe aqueles campos __parent, __active, __class e qualquer possivel lixo que ferramentas incluam no retorno (nem sempre isso acontece, mas acontece)

Comprima as requests

Se vc tem APIs que retornam JSON, utilize um GZIP no server pra comprimi-los (geralmente isso está configurado automaticamente, se não estiver adicione). Lembre-se: serviços de hosting cobram por numero de requests e por tamanho de payload.

O que puder ser feito no front: Faça no Front

Vamos supor que vc cria um snippet/embed que mostra mapas na tela. E toda vez que o user cria um desses vc salva esse snippet em formato string no DB e devolve via request depois.

A tecnica acima tem dois problemas:

  1. Vc salva um snippet inteiro sendo que poderia salvar apenas os parametros e reconstruir o snippet no front, aliviando as request
  2. Se o snippet mudar os anteriores ficarão deprecados, ou vc terá um trabalhao de update pra fazer.

Ou seja: se algo pode pode ser processado no front, não salve o resultado inteiro do processamento: salve os parametros, troque parametros via requests e reprocesse no front - te custará menos.

Outro ponto importante: Faça validações no backend (por segurança) e no frontend para economizar requests. A ideia é garantir ao máximo que uma request é feita apenas se todos os dados e requisitos estivem ok.

Configure Cache

Pare de ter medo de cache. Configure um bom service-worker no front se vc usa SPA/PWA, aprenda a usar as headers de cache e politicas de cache da sua API. Pare de ficar desligando cache atoa, vc ta rasgando dinheiro. Não precisa correr, mas cuide disso.

Não trafegue tokens via body

Serviços cobram por tamanho de body trafegado via requests tbm. Muitas vezes um token (seja JWT ou de qualquer outra coisa) tem centenas de bytes. Prefira utilizar uma header propria (ou custom) pra isso: Bearer Tokens, X-API-Token, etc

Filtre sempre no backend primeiro

Se são dados estáticos que necessitam filtro + paginação: traga-os sempre filtrados do backend. A regre deve ser

  1. Filtre primeiro no DB (query)
  2. Processe o resto SE PRECISAR

Filtrar no front significa quase sempre enviar dado inutil

Use um BFF (Back for Front)

Se vc precisa mudar o shape de retornos de requests, otimizar politicas de cache, segurança etc mas seu front conversa com uma API grande e dificil de refatorar, crie um BFF.

Sugestão de leitura: Post - Vamos falar de BFF Patten

Considere parceiros externos

Essa nem sempre é uma boa, deve ser analisada com muito cuidado, implica em estrategia, politica de segurança e privacidade, etc etc. Massss por vezes terceirizar o serviço pesado pode ser uma boa (e mais barato). Tem que analisar com cuidado.

Aprenda a utilizar Server Sent Events, Streams e Sockets

Se vc precisa verificar dados em tempo real, trazer grandes montantes de dados ou compor remotamente um retorno de algo, ficar fazendo trocentas requests por min (polling) é má ideia e custa caro em varios contextos.

Para o contexto acima pode caber um estudo das tecnicas apresentadas no titulo e quem sabe até mesmo algumas outras relacionadas a esse tipo de dado.

Tudo depende

As dicas que apresentei não são pra serem aplicadas cegamente. São só um norte para uma ANALISE. Muitas vezes uma otimização custa caro pro mantenimento e diminui pouco o custo, transferindo esse mesmo custo pra mantenimento de equipe. Analise com cuidado :)