- Publicada em:
Benchmark da API: Desempenho, Análise e Otimizações para Maior Eficiência com laravel 🚀
- Authors
-
-
- Name
- Gabriel Novaes
-
Ao testar o desempenho da minha API de notícias desenvolvida com Laravel, utilizei o Apache Benchmark (ab) para avaliar sua performance sob carga. Os resultados mostram que a API é estável e responde bem a múltiplas requisições simultâneas, mas ainda há espaço para otimizações. Neste post, compartilho a análise detalhada do benchmark, destacando os pontos positivos, desafios encontrados e sugestões para melhorar a velocidade e eficiência da API. Se você também usa Laravel e quer aprimorar a performance do seu sistema, este artigo é para você! 🚀
Benchmarking api.onovaes.com.br (be patient)
Finished 2102 requests
Server Software: nginx
Server Hostname: api.onovaes.com.br
Server Port: 443
SSL/TLS Protocol: TLSv1.3,TLS_AES_256_GCM_SHA384,2048,256
Server Temp Key: X25519 253 bits
TLS Server Name: api.onovaes.com.br
Document Path: /api/v1/posts/?per_page=20
Document Length: 39494 bytes
Concurrency Level: 10
Time taken for tests: 64.399 seconds
Complete requests: 2102
Failed requests: 0
Total transferred: 84088408 bytes
HTML transferred: 83016388 bytes
Requests per second: 32.64 [#/sec] (mean)
Time per request: 306.368 [ms] (mean)
Time per request: 30.637 [ms] (mean, across all concurrent requests)
Transfer rate: 1275.15 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 44 100 236.7 76 3154
Processing: 83 138 37.9 138 1124
Waiting: 82 137 38.0 138 1124
Total: 128 238 240.1 217 3331
Percentage of the requests served within a certain time (ms)
50% 217
66% 241
75% 252
80% 258
90% 278
95% 292
98% 330
99% 1224
100% 3331 (longest request)
Análise do chatGPT
O desempenho da sua API de notícias parece sólido, mas há alguns pontos que podem ser otimizados. Aqui está a análise dos principais indicadores:
Pontos Positivos 🚀
-
Nenhuma requisição falhou ✅
- Todas as 2.102 requisições foram concluídas com sucesso, o que mostra estabilidade no seu sistema.
-
Boa taxa de transferência 📈
- 1275.15 KB/s indica que o servidor está conseguindo entregar os dados de maneira eficiente.
-
Tempo médio de resposta razoável ⏱️
- 306 ms por requisição não é ruim para uma API que retorna um payload grande (39 KB por resposta).
- O tempo médio por requisição concorrente (30.6 ms) mostra que o servidor consegue lidar bem com múltiplos usuários simultâneos.
Pontos de Atenção ⚠️
-
Variação nos tempos de resposta (desvio padrão alto)
- O tempo de resposta médio é 306 ms, mas com um desvio padrão de 240 ms.
- Algumas requisições demoraram até 3.3 segundos ⏳, o que pode impactar a experiência do usuário.
Sugestões para melhoria:
- Cache de resposta (Redis, Cloudflare, Laravel Response Cache).
- Otimizar queries do banco (indexação, evitar N+1, etc.).
- Otimizar serialização JSON para reduzir o peso da resposta.
-
Picos de latência (1% das requisições > 1,2s)
- 99% das requisições foram concluídas em até 1,2s, mas algumas chegaram a 3,3s.
- Isso pode indicar gargalos ocasionais no banco de dados ou processamento pesado.
Sugestões:
- Monitorar queries lentas com o Laravel Telescope ou o
slow_query_log
do MySQL. - Otimizar workers e filas (caso esteja rodando jobs junto com as requisições).
- Configurar o banco para melhor desempenho (tuning no MySQL/PostgreSQL).
-
Número de requisições por segundo pode ser melhorado
- 32.64 requisições/segundo é um número decente, mas pode melhorar com cache de API e otimizações no código.
Conclusão e Próximos Passos
✅ Sua API está estável e performa bem sob carga moderada.
⚡ Com algumas otimizações, o tempo médio pode cair para menos de 200ms e o throughput aumentar para 50+ req/s.
Se quiser testar melhorias, posso te ajudar a configurar cache, otimização de queries, ou profiling com Laravel Debugbar/Telescope. 🚀