Ir para conteúdo

[Arquivado][XMagazine] DevPaper - Otimizando seus sistemas


XMagazine

Posts Recomendados

devpaper-icon.png

Uma das coisas que mais me fascina em OpenTibia é a facilidade e o incentivo dado pelos desenvolvedores aos usuários de poderem modificar, adicionar ou mesmo remover alguma funcionalidade por meio de scripts. Com isso, é possível que muitas pessoas leigas no assunto possam fazer muitos códigos, que por mais que funcionem, podem pecar quando o assunto é desempenho.

 

 

É necessário então uma otimização nos sistemas, e para isso, elaborei algumas formas de melhorar estes processos:

 

 

 

1. Veja se seu sistema realmente quer melhorias

 

É normal ver programadores criticando outras pessoas por falarem que o algoritmo não está tão eficiente como poderia estar. Porém, não ache que ele é o dono da verdade, muitas vezes otimizar algum sistema é sinônimo de abdicar de alguns recursos que a forma que fora desenvolvido o proporciona.

 

 

Algumas vezes você melhora a performace à custa de perder flexibilidade. Outras vezes, uma alteração para melhorar a performace agora poderá ter um custo adicional em manutenção do sistema no futuro.

 

 

 

2. Cuidado ao usar recursividade

 

Recursividade é uma técnica  bastante útil para definir-se algo parcialmente em termos de si mesmo. Podemos usar em programação para chamar funções dentro delas mesmas. Exemplos clássicos disso são algoritmos como o de fatorial ou mesmo da série Fibonacci.

 

 

Apesar de facilitar a vida do programador, a recursão usa mais memória do sistema para acomodar variáveis a cada chamada. Além disso, o estado corrente da computação tem que ser armazenado para permitir a volta da chamada recursiva. É recomendado então, não usar algoritmos recursivos quando existe uma solução óbvia por interação, tais como uma razão de termos que seja comum.

 

 

 

3. Escolha entre temporaridade ou espaço

 

Infelizmente quando queremos um sistema efetivo, é preciso escolher entre ter o menor tempo de execução possível ou uso de menos espaço. Tenha em mente que para avaliar a complexidade de seu algoritmo qual desses dois fatores deseja otimizar

 

 

 

4. Evite açúcares

 

A maioria das linguagens usam diversos syntax suggars que nada mais são que “atalhos” para acesso de um recurso que não é muito elegante. Em gerenciamento de software o uso deste recurso é bem utilizado, porém, infelizmente se o objetivo é performace, deve-se evitar quando possível.

 

 

 

5. Tome cuidado em controles de fluxo

 

A principal maneira de se otimizar um sistema é checando pelos controladores de fluxo deste.

 

 

Condições

 

 

  1. Caso tenha uma série de condições, começe com as mais usuais e eficientes (interpretadas com facilidade).
  2. Caso seja mais normal de acontecer uma condição mesmo que esta seja menos eficiente, ignore o passo (1).
  3. Use nas condições ?atalhos? com os operadores ?or? e ?and? para evitar condições dentro de condições.
  4. Evite comparar strings, pois ao fazer isso você checa cada letra, e isso pode ser prejudicial.
  5. Sempre que possível, use os operadores lógicos ?or? e ?and? diretamente nas expressões ao invés de condições dentro de outras condições.

Laços de repetição

 

 

  1. Em loops para vetores indexados por números dê preferência por:
     
     
    for _, v in ipairs(vetor) do
    -- código
    end
     
     
     
     
    O ?_? serve para pular o retorno e também para variáveis temporárias
  2. Se caso o loop for para vetores indexados por outros vetores usar:
     
     
    for k, v in pairs(vetor) do
    --
    end
     
     
     
  3. Não declare variáveis em loops que não forem modificadas neste, isso serve para chamadas de funções:
     
     
    for i = 1, 10000 do
    local x = math.sin(I)
    end
     
     
    O processamento do exemplo acima é 30% mais lento do que:
     
     
     
     
    local sin = math.sin(I)
    for i = 1, 10000 do
    local x = sin
    end

 

6. Não confie no garbage collector

 

Esteja atento à criação de objetos temporários quando se passa parâmetros do tipo class de/para funções. Seu programa pode perder muito tempo criando e destruindo objetos temporários, independentemente do compilador e da plataforma. Apesar de Lua, Java entre outras linguagens possuirem garbage collector (GC), pode ser que estes não hajam da forma mais adequada. Além disso, é uma boa prática caso você um dia migre para uma linguagem que não conte com esse recurso.

 

 

 

 

>>> Leia na XMagazine

Link para o comentário
Compartilhar em outros sites

  • 8 years later...
Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...