Desenvolvimento - ASP

Velocidade I

Vamos falar de um dos aspectos mais importantes de um bom programa de computador : a velocidade de execução de um código. De nada adianta um programa robusto, com dados confiáveis, cheio de funcionalidades, sem bugs, se tudo o que ele faz demora uma eternidade para apresentar os resultados...

por Eraldo Júnior



Vamos falar de um dos aspectos mais importantes de um bom programa de computador : a velocidade de execução de um código. De nada adianta um programa robusto, com dados confiáveis, cheio de funcionalidades, sem bugs, se tudo o que ele faz demora uma eternidade para apresentar os resultados. Pesquisas demostram que a paciência do usuário quando espera o resultado de um processamento dura 10 segundos e depois a percepção dele sobre o programa tende a ser negativa mesmo que os outros requisitos que fazem um software ser considerado bom estejam corretamente implementados.

É claro que a velocidade não pode ser medida em termos absolutos e muitas vezes um código tem que implementar tantas funcionalidades, tantas regras de negócio, que é impossível ficar dentro desta meta na atual velocidade dos processadores. Imagine que você está informatizando um processo administativo manual que é tão complexo que leva dias para ser concluído. Nestes casos se o seu código resolver este processo em um tempo significativamente menor já será considerado como uma grande vitória pelo usuário. Um bom exemplo deste aspecto relativo da velocidade é o sistema informatizado de apuração eleitoral, que reduziu o tempo de apuração de semanas para poucos dias.

Vamos então discutir alguns pontos que aplicados em conjunto de forma consistente produzem um impacto positivo na velocidade de um sistema.

Um ponto que pode gerar um grande impacto negativo na velocidade ocorre na fase de design do projeto, quando você ou outras pessoas decidem quais as funcionalidades o software vai implementar. Vc deve sempre se perguntar ou questionar os responsáveis pelo projeto: essa funcionalidade é mesmo importante, ela ajuda a vida do usuário, ela é essencial ? O excesso de funcionalidades incha o programa tornando-o cada vez mais lento. Só fique com o que comprovadamente agrega valor ao usuário, mantendo o design sempre simples, enxuto e essencial. Isso é uma arte e é muito difícil de conseguir.

É possivel conseguir um ganho de performace com algumas técnicas básicas da ciência da computação.

A primeira técnica é usar tabelas de decisão em arrays em lugar de ifs e selects. Essa técnica é muito boa para processar campos de tipo inteiro de um banco de dados.

Um pequeno exemplo vai ajudar a ilustrar este conceito:

Vc deve percorrer uma tabela de um sistema de controle financeiro de clientes que tem dois campos - nome e status.

O campo status é do tipo inteiro e pode possuir os seguintes valores com seus respectivos significados:

  • 0 - normal
  • 1 - inadimplente
  • 2 - grande cliente

Foi especificado que devemos mostrar cada cliente com uma cor relativa ao seu status, vermelho para os inadimplentes, amarelo para os grandes clientes e azul para os normais. Os gerentes de produto consideraram que a funcionalidade das cores vale a plena implementar mesmo que o código fique um pouco mais lento porque facilita a leitura do usuário das informações na tela.

Supondo que Rsclientes é um recordset com o conteúdo da tabela, uma implementação típica seria:

Listagem 1:

<%
do while not  Rsclientes.eof

select case  Rsclientes("status")

case 0
cor="blue"

case 1
cor="red"

case 2
cor="yellow"

end select
%>

<font color="<%=cor%>"><%= Rsclientes("nome")%></font><p>

<%
Rsclientes.movenext
loop

Na abordagem com a tabela de decisão você começaria dimensionando um array:

Listagem 2:Dimensionando o array

dimcor(3)
cor(0)="blue"
cor(1)="red"
cor(2)="yellow"
%>

Retire então o bloco de select do código anterior e reescreva a linha que escreve o nome do cliente na tela para que ela fique como abaixo:

Listagem 3:Código modificado para escrever o nome do cliente

<font color="<%=cor(Rsclientes("status"))%>"><%= Rsclientes("nome")%></font><p>
O código correto ficaria como o que segue abaixo:
<%
dimcor(3)
cor(0)="blue"
cor(1)="red"
cor(2)="yellow"


do while not  Rsclientes.eof

%>

<font color="<%=cor(Rsclientes("status"))%>"><%= Rsclientes("nome")%></font><p>

<%
Rsclientes.movenext
loop
%>

Como vc percebeu nós usamos o conteúdo do campo de tipo inteiro chamado status como índice para o array chamado cor. Outro ponto importante é que a segunda abordagem torna o seu código menor, muito mais compacto, o que é outro requisito muito importante de um bom software.

Teste as duas abordagens do problema, vc vai perceber que a segunda tem somente um pequeno ganho de velocidade. Vc não deve desanimar com isso porque a guerra da velocidade é ganha com vitórias em pequenas batalhas.

Nos proximos artigos vamos discutir algumas particularidades menos conhecidas do objeto ADO e das configurações do Servidor IIS que aumentam significativamente a performace da sua aplicação.

Abraços e boa programação.

Eraldo Júnior

Eraldo Júnior - Programador há mais de 10 anos, trabalha com desenvolvimento Web há 5 anos, tendo participado como consultor de projetos para as seguintes empresas: Embratel, Rede Globo e Maria Bonita Confecções. Atualmente é o programador do site Ti Master e consultor em projetos Web da empresa Infodream, http://www.infodream.com.br