O problema típico
Exemplo hipotético: a tela inicial mostra faturamento do mês, comparativo com o ano anterior, ranking de vendedores e pedidos por status. Cada indicador consulta a tabela de pedidos inteira. Com poucos meses de dados, abre rápido; depois de alguns anos, leva segundos para cada usuário, a cada acesso.
Técnicas
| Técnica | Efeito |
|---|---|
| Pré-calcular indicadores | Uma rotina atualiza tabelas resumo a cada X minutos; a tela só lê o resultado |
| Cache | Resultados reaproveitados por um período; todos os usuários leem o mesmo cálculo |
| Agregar no banco | Somas e contagens feitas pelo banco, não no código |
| Índices | Filtros por período e status ficam rápidos |
| Carregar em blocos | A tela abre e cada indicador aparece quando fica pronto |
| Menos indicadores na abertura | Detalhes sob demanda, em telas próprias |
Defina a atualização necessária
Nem todo indicador precisa ser em tempo real. Faturamento do mês atualizado a cada 15 minutos costuma bastar; pedidos aguardando ação talvez precisem ser imediatos. Essa decisão de negócio define onde usar cache e onde não.
Veja também relatórios lentos e banco de dados lento. Otimizamos dashboards no nosso serviço de manutenção de sistemas PHP e Laravel.