ASP.NET- Reduzindo o tamanho das páginas para ganhar desempenho


O desempenho de uma aplicação é um fator muito importante que deve ser levado em conta desde as fases inicias do desenvolvimento. Para aplicações web este fator é ainda mais crítico de forma que existem procedimentos e normas de condutas que levam em conta o fator desempenho nos pequenos detalhes da aplicação.

Uma das formas aumentar o desempenho em uma aplicação web é reduzir o tamanho das páginas visto como elas trafegam entre o cliente e o servidor, quando menor forem, menor será a memória e o tráfego de rede envolvido.

Em aplicações ASP .NET  o ViewState é usado para manter o estado de uma página entre as requisições efetuadas sendo que o estado de cada controle da página é reconstruído após o postback para o servidor. Devido a esta habilidade para manter o estado, quando uma página é postada de volta ao servidor, o uso do ViewState reduz a quantidade de código que você tem que escrever, pois você não tem mais que extrair valores do formulário postado para processamento ou redefinir os valores dos controles quando você exibe a página novamente como ocorria com a linguagem ASP.

A propriedade ViewState do ASP.NET para páginas e controles individuais tem duas finalidades:  manter o estado entre solicitações e armazenar valores personalizados em um campo oculto protegido e resistente a violações. Ref.: ASP.NET State Management: View State.
Este campo do tipo oculto(hidden) _VIEWSTATE do HTML contém uma serialização de texto compactado(codificação base64) do estados dos controles do servidor contidos no seu formulário. O ASP.NET usa esse estado para comparar o estado de um controle com o seu estado anterior, verificando se há necessidade de acionar algum evento para o controle, por exemplo: quando a propriedade do texto é alterada.

O ViewState é uma lista de pares nome = valor salva toda vez que a página é postada. Ele armazena todos os dados nesse campo oculto do HTML, por isso ele é limitado apenas para itens que podem ser serializados, ou seja, se você deseja armazenar itens mais complexos no ViewState, você deverá converte-los em String.

Podemos usar o ViewState para armazenar variáveis no cliente sem usar cookies sendo que o valor somente poderá ser usada na mesma página.
Exemplo:

1- Armazenando valores de variáveis no ViewState:    Me.ViewState("nome")= "José Carlos Macoratti"

2- Recuperando valores de uma variável do ViewState:  Response.Write( Me.ViewState("nome"))

Embora o uso do ViewState reduza de forma significativa o código, ele tem um custo. Todos os dados requeridos para manter o estado dos controles é armazenado em um controle na página HTML. Dependendo do número e tipos de controles que você usar em suas páginas , o ViewState pode ficar bem grande resultando assim em uma perda de desempenho pois os dados do ViewState é enviado para o navegador quando a página é renderizada e retornada para o servidor como parte de um postback.

O desempenho é afetado pela geração do ViewState ,quando a página é renderizada pela primeira vez e também pela transferência de dados do ViewState para e a partir do navegador durante os postbacks. A seguir temos uma visão padrão de utilização do ViewState:

	<input type="hidden" name="__VIEWSTATE"  value="dDwtOTQzNjg3NDE1O3Q8O2w8aTwxPjs"/>

Uma solução é desabilitar o ViewState de forma criteriosa após fazer uma análise de cada página da aplicação e de cada um dos controles usados afim de determinar se o controle ViewState é necessário. Assim os procedimentos a serem adotados para atingir este objetivo são:

Um dos critérios que você pode usar é verificar se uma determinada página é postada para ela mesma. Se ela não possuir um AutoPostBack então é forte candidata a ter o seu ViewState desabilitado para a página inteira. Isto é feito definindo o atributo EnableViewState na diretiva @Page como False:

	<%@ Page Language="VB" MasterPageFile="~/Macoratti.master"
		 AutoEventWireup="false"
		 CodeFile="Teste.aspx.vb"
		 Inherits="Teste.Macoratti"
		 Title="Desempenho com ViewState"
		 EnableViewState="false" %>

Você também pode obter o mesmo resultado usando o evento Load da página e atribuindo o valor False a esta propriedade:

                                      Page.EnableViewState = False

Se a página possui um postback para ela mesma você precisa verificar cada um dos controles da página para determinar se o estado da informação é requerida pelo controle em um postback. Se a informação do estado não é necessária a propriedade ViewState para este controle pode ser desabilitada.

A seguir temos um exemplo onde desabilitamos a propriedade para o controle Content em um página:

<asp:Content ID="Macoratit" Runat="server" ContentPlaceHolderID="Macoratti" enableviewstate="false">

A ASP.NET 2.0 removeu a informação necessária para controlar o postaback do ViewState; a informação sobre o postback agora esta contida no ControlState. Esta separação fornece maior flexibilidade para desabilitar o ViewState e assim reduzir o tamanho das páginas.

Esta é uma das muitas atitudes que você pode tomar para melhorar o desempenho de sua aplicação.

Aguarde em breve mais dicas sobre desempenho em aplicações ASP .NET.

Referências:

  • Usando Web Forms II
  • Paginação com Datalist
  • ASP.NET - PostBack e ciclo de vida de uma página

  • José Carlos Macoratti