Boas Praticas em Performance e otimização uma primeira olhada
- #Informática Básica
- #Arquitetura de Sistemas
- #QA
Falando sobre performance e otimização
Salve jovem padawan, no artigo de hoje vamos conversar sobre um assunto pantanoso, que derruba 7 em 10 programadores, estou falando de performance e otimização de programas, infelizmente a pressa é inimiga da perfeição.
Como veremos no decorrer do artigo, o grande problema sempre é o fator tempo, somos todos coelhos da Alice, atrasados e fugindo da Rainha Louca, ops Rainha de Copas e no final quem paga é o programa implementado dentro da máxima o melhor dentro possível.
Pense antes de codificar
Rascunhe seu programa em lápis e papel, desta forma consegue ter uma visão do todo, uma noção do caminho crítico e para o teste de mesa, num primeiro momento consegue-se visualizar pontos passiveis de melhoria e pontos onde o programa não se comporta da maneira espera.
Existem inúmeras ferramentas visuais no mercado, que auxiliam na depuração calculando o uso de memória, uso de CPU e gargalos do sistema, para o ambiente Mainframe existe o Omegamon, que em seu relatório apresenta estatísticas fabulosas sobre os problemas encontrado no código.
Uso de Memoria
Cuidado ao codificar não crie variáveis em excesso, lembre-se sempre de inicializar as variáveis no princípio do código, desta forma economiza-se ciclos de CPU desnecessário, forçando paradas no processamento para inicializar as variáveis.
Cuidado ao utilizar arrays e vetores, pois ao criar grandes tabelas internas estará consumindo memoria desnecessariamente e prejudicara o bom funcionamento do seu programa, principalmente em escala, quantos mais usuarios maior queda de performance.
Verifique as variáveis não utilizadas, que gastam espaço em memória, pense num programa utilizado por milhares de usuários, com centenas de milhares de requisição, ao final de um ano, quanto de memória poderia ter sido economizado, quanto de processamento ou ciclos de CPU, gasto em gerenciamento de memória desnecessário. Imagine a pegada ecológica, gasto de eletricidade e CO2 liberado.
Ciclos de CPU
A pressa é inimiga da perfeição, muitas vezes criamos logica em que o programa consome desnecessariamente processamento, movendo variáveis semi-utilizadas ou mesmo sem nenhuma utilização, atente-se a código morto e rotinas que entram e saem sem agregar nenhum valor ao processo.
Pense no custo em CPU de chamadas repetida a functions, arrow-functions e programas externo, a cada parada de processo e pulo para outro programa e o próprio retorno ao programa chamador.
Trabalhe apenas com os campos da tabela que serão utilizados em outputs ou cálculos, o trafego de dados além da memoria gera gasto de CPU indevidos. Muitas vezes é mais produtivo, usar arquivo sequencial da tabela, através de unload, usar aplicativos específicos para ETL, a exemplo SORT do Mainframe.
Espaço em Disco
Em tempos de cloud computer e processamento distribuído, desvalorizávamos o impacto do processamento, em gravar dados desnecessariamente em disco, informações que nunca serão utilizadas e degradam o ambiente, obrigando a adquirir mais e mais espaço em disco.
Fazendo o programa perder milissegundos cruciais na busca da informação num disco imenso e cada vez mais abarrotado, uma politica de dados é importante para evitar esse vies.
Os perigos de laços estilo While
Quando codificar While cuidado com os laços infinitos, as vezes um teste incompleto deixa uma situação onde o FLAG de saída, pode parecer obvio mas grandes programadores caíram em situação semelhante, um IF mal planejado e um FLAG descontrolado e surge o caos, com looping infinito ou anomalias de difícil reprodução.
Os perigos de laço estilo FOR
O perigo do FOR nao é tão drástico quanto o While, mas devido a sua quantidade de uso é muito prejudicial a longo prazo, obrigando a aquisição de mais hardware inutilmente, uma solução bem simples é sair do laço assim que a solução for encontrada.
Os perigos de IF inúteis
Muitas vezes o programador esta cheio de boas intenções e cria uma sequencial sem fim de IFs para garantir a qualidade dos dados e o controle de fluxo do programa, porem muitas vezes são desnecessários, procure pensar numa logica do IF master e somente se ele funciona gerar os outros testes em IF, quanto menos paradas para decisão mais performático e melhor será seu programa.
Use comandos em estilo EVALUATE, SWITCH para um controle de fluxo mais eficiente e atente-se a nao usar ELSEs em demasia, dificultam muito a analise e ajudam a gerar erros de simpatia, pois as vezes confundimos o lugar do ELSE e no teste pulamos o IF.
Outro grande problema e a quantidade de paradas no processamento, obrigando o programa a funcionar como conta gostas.
Espionando programas em Mainframe
Existe uma ferramenta fabulosa em ambiente Z/OS, o OMEGAMON que monitora e acompanha a performance de programas em ambiente Mainframe, indicando os custos de CPU / Memoria e rotinas em looping. Vale a pena conhecer o manual técnico e explorar esta ferramenta.
Em banco de dados DB2 existe o comando Explain que gera estatísticas de acesso e caminhos para melhorias tais como criar indices, reorg de tabelas, partição de ambientes e etc, auxiliando o DEV a criar querys mais performáticas.
Conclusão
Caro padawan, meu superficial e com muitos pontos a esclarecer, mas o objetivo deste artigo, foi faze-lo pensar, a ter cuidado quando codifica, apesar das maquinas terem caído o custo, em quantidade o uso de Memoria e CPU desnecessário tiram a competitividade da empresa, gerando custos ocultos e gerando prejuízos a longo prazo.
Como exercício de imaginação, pense um Banco com milhares de agencias e milhões de clientes, usando os serviços 24 horas por dia, 7 dias por semana e 365 dias no ano. Quanto custara ao final do ano alguns IFs desnecessários e 2 segundos desperdiçados em loops inúteis?
Por isso pense bem ao codificar, faça teste de mesa, use papel e lápis para ajudar em seu trabalho, verifique os IF e loopings, nao use campos de tabelas desnecessariamente e boa sorte.
Espero ter ajudado. Bom curso a todos
Mais momento jabá, quem diria que ja passou retrospectiva do meu 44° aniversario , tantas aventuras, tantos momentos únicos, memorias em imagens de momentos mágicos da vida do Tiozão visite meu vídeo e veja para onde fui desta vez: https://www.youtube.com/watch?v=sBgA0nvtpdU
Bom curso a todos.
https://www.linkedin.com/in/vagnerbellacosa/
https://github.com/VagnerBellacosa/