Categorias

Dicas de Otimização para Desenvolvimento com ASP

1) Uso de Comentários no Código

O uso de comentários em páginas HTML não é algo muito interessante pois aumenta a quantidade de informações que é transferida do Servidor Web para o Browser, e só tem utilidade para os programadores da página. Entretanto, os comentários no código ASP não representam uma mudança significativa na performance das páginas pois são simplesmente ignorados pelo interpretador e não são transferidos para o browser.

2) Scripts Muito Longos

Obviamente, você pode incluir suas regras de negócio em páginas ASP, pois elas são processadas no Servidor Web. Entretanto, isto pode tornar os seus scripts muito longos.
Não podemos perder de vista que todo código ASP é interpretado linha a linha. Dessa maneira, scripts muito longos podem se tornar muito lentos. Nestes casos, a melhor maneira é usar Componentes que encapsulem as regras de negócio em código compilado.

3) Uso de Variáveis Globais

Sempre que possível, evite o uso de variáveis globais. As variáveis declaradas dentro de subrotinas ou funções são acessadas mais rapidamente e deixam o código mais limpo e organizado.

4) Tratamento de Erro

Tratamento de Erros é essencial em aplicações sérias. Mas existe uma pequena queda na performance das páginas que possuem tratamento de erro. Dessa maneira, o bom senso diz que o tratamento de erro deve ser usado sempre que você não tiver controle sobre os erros que possam acontecer em sua aplicação. Um bom exemplo é quando você usa objetos que acessam outros recursos, tais como ADO ou FileSystem.

5) Uso de Transações

O uso de transações (<%@ TRANSACTION = REQUIRED %>) causa uma queda dramática da performance de páginas ASP. Dessa forma, apenas use transações quando duas ou mais operações precisem ser realizadas de uma única vez.

6) Uso de Buffer

Você pode determinar que o conteúdo de sua página ASP seja exibido somente depois de todo o processamento da página através da propriedade Response.Buffer = True.
Isto é uma boa prática, pois aumenta a performance de processamento das páginas ASP. Mas em alguns casos, é necessário enviar alguma informação ao cliente durante o processamento das páginas. Nestes casos, use Response.Buffer = False ou use o método Response.Flush para enviar as informações processadas até o momento para o browser.

7) Desabilitar o Controle de Estado Quando Possível (Local e Server)

O controle de estado é algo muito interessante que as páginas ASP nos proporcionam. Entretanto, existe uma queda na performance de páginas que fazem uso deste recurso.
Desta maneira, sempre que o controle de estado não se fizer necessário em uma página, use a seguinte instrução para desabilitá-lo:

<%@ENABLESESSIONSTATE = FALSE %>

Se nenhuma das páginas de seu site fizer uso de controle de estado, você pode configurar diretamente nas propriedades do site. Para isto, selecione a caixa de diálogo Properties do site em questão. Em seguida, selecione o botão Configuration na aba Home Directory. Desmarque, então, a opção enable session state em App options.

8) Uso de Arrays Dinâmicos

O uso da instrução Redim nos economiza um pouco de memória e a preocupação de estourar o número limite de elementos dos arrays em nossos códigos. Entretanto, o uso de Redim provoca uma queda na performance. O ideal é usar a instrução Dim já com a quantidade de elementos que será usada. Mesmo nos casos em que você não sabe a quantidade exata, o uso de uma ordem de grandeza, com o risco de ocupar alguns espaços desnecessários da memória, compensa em função da velocidade.

9) Uso da Propriedade IsClientConnected

Sempre que sua página ASP tiver um longo processamento, use o método Response.IsClientConnected para verificar se o cliente ainda está conectado. Caso contrário, você poderá abortar o processamento evitando, assim, o consumo desnecessário de recursos do servidor.

10) Uso de Índices

Sempre que possível, faça uso de índices em seus bancos de dados. Os índices aumentam incrivelmente a performance de consultas e stored procedures acessadas via ADO em páginas ASP. O uso de índices é recomendado principalmente se você estiver usando o SQL Server.

11) Retornando Apenas o Necessário

Certifique-se que suas consultas estão retornando apenas os campos necessários. Nos casos de consultas que retornam muitos registros, tente paginar a consulta de forma que ela retorne apenas alguns registros de cada vez. Isto poderá aumentar bastante a performance de suas páginas ASP.

12) Armazenando Connections ADO em Variáveis de Aplicação ou de Sessão

Jamais armazene objetos Connection em variáveis de Aplicação ou de Sessão. O ADO já possui um mecanismo chamado pooling que otimiza o uso de instâncias de conexões. Além do mais, não é uma boa idéia armazenar instâncias de objetos em variáveis de Sessão.

13) Instancie suas Conexões diretamente na página em questão e não esqueça de atribuir Nothing a elas quando terminar o uso.

14) Fechar Explicitamente Recordsets e Connections

Tanto objetos Recordset como Connection devem ser fechados explicitamente através do método Close assim que termine o seu uso. Desta forma, você os disponibiliza para o pooling do ADO.

15) Reutilização de Recordsets e Commands

Evite a reutilização de objetos Recordset e Command. Isto não necessariamente irá aumentar a performance de suas aplicações, mas sua aplicação ficará mais clara e mais fácil de dar manutenção.

16) Utilizando o Tipo de Cursor (Cursor Type) e o Tipo de Bloqueio (Lock Type) Mais Eficientes

Use sempre o tipo de cursor e o tipo de bloqueio mais simples para a tarefa que você deseja realizar.

17) Uso de GetRows

O método GetRows atribui todo o conteúdo de um Recordset para um vetor bidimensional, cuja primeira dimensão representa os campos e a segunda representa os registros. Logo em seguida, o Recordset pode ser fechado. O uso de GetRows aumenta muito a performance de páginas ASP:

...
If objRS.EOF Then
Response.Write ("Não foram encontrados registros.")
objRS.Close
Set objRS = Nothing
Else
Dim arrRS
arrRS = objRS.GetRows
objRS.Close
Set objRS = Nothing
Dim NumRegistros
Dim NumCampos
Dim RegistroAtual
Dim CampoAtual
NumCampos = Ubound(arrRS, 1)
NumRegistros = Ubound(arrRS, 2)
Response.Write ""
For RegistroAtual = 0 To NumRegistros
Response.Write ""
For CampoAtual = 0 To NumCampos
Response.Write ""
Next
Response.Write ""
Next
Response.Write "
" & arrRS(CampoAtual, RegistroAtual) & Ä"
" End If ...

18) Conexões Sem DSN

As conexões sem DSN normalmente são mais rápidas que as conexões usando DSN de sistema, que por sua vez são mais rápidas que as conexões usando DSN de arquivo.

As conexões em DSN são aquelas cujos parâmetros de conexão são passados diretamente no momento da criação da conexão.

19) Uso do Access

Se você estiver usando o Access como base de dados, não espere grandes ganhos de performance já que ele é um banco de dados baseado em arquivo e não é cliente servidor.

20) Uso do Provider OLEDB SQL (SQLOLEDB)

Se você estiver usando o SQL Server, use o provider SQLOLEDB para aumentar a performance de sua aplicação.

21) Uso do arquivo ADOVBS.inc

Evite o uso do arquivo ADOVBS.inc que contém as declarações das constantes usadas pelo ADO. Ao invés disso, declare apenas as constantes que você irá usar ou coloque a seguinte referência em seu arquivo global.asa:


ou


ou uma versão superior.

22) Uso de um Objeto Connection Separado Quando Trabalhar com Recordsets

Se você estiver usando um único Recordset, passe a string de conexão diretamente para a propriedade ActiveConnection:

objRS.ActiveConnection = Application("ConexaoString")

Quando você estiver utilizando vários Recordsets, crie um objeto Connection e use-o na propriedade Active Connection:

...
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open Application("ConexaoString")
Dim intContador
For intContador = 1 To 10
Set objRS = Server.CreateObject("ADODB.Recordset")
Set objRS.ActiveConnection = objConnection
objRS.CursorType = 0 ‘adOpenForwardOnly
objRS.LockType = 1 ‘adLockReadOnly
objRS.Open Application("SQL")
If objRS.EOF Then
Response.Write "Não Foraam Encontrados Registros"
Else
‘Escreve o Conteúdo
...
End If
objRS.Close
Set objRS = Nothing
Next
objConn.Close
Set objConn = Nothing
...

Conclusão

O ganho de performance de cada um dos itens abordados pode não ser significante quando vistos isoladamente. Mas o uso conjunto dessas dicas pode trazer um aumento expressivo na performance de suas aplicações ASP.