Arquivo

Textos com Etiquetas ‘GZip’

ViewState, um problema sério a ser resolvido.

3, novembro, 2009 Sem comentários

Como todos os que trabalham com .NET em web applications, o ViewState é um recurso que torna o desenvolvimento muito mais ágil do que no antigo ASP, eu mesmo, fiz diversas vezes asjutes técnicos (vulgo gambiarra) para pegar valores de postback, eu sempre trabalhei com uma página para cara entidade, e isso me custou muito tempo de desenvolvimento para cada módulo.

Quando iniciei minhas atividades na plataforma .NET, com o VB.NET 2002, eu não liguei muito para o ViewState, achava ele bonitinho, mas pesado demais. Hoje ele se tornou um empecilho muito grande para algumas aplicações, pois,  dependendo do número de objetos que tenho em uma página, ele fica imenso.

Após pesquisar por diversos fóruns sobre o assunto, descobri que antes de aplicar qualquer script miraculoso, devemos seguir os passos que vi no Site do Macoratti.

Segundo ele, devemos desabilitar o ViewState para controles onde não é necessário o ViewState, como por exemplo, botões, eles têm suas propriedades pré-definidas em tempo de desenvolvimento, e muitas delas não são alteradas durante a execução, mas mesmo assim consomem tráfego de rede.

A partir daqui, podemos aplicar duas soluções que encontrei, são elas:

– Armazenar o conteúdo de ViewState em Session, isso consome recurso no servidor, mas reduz o tráfego de página consideravelmente, separei dois links sobre o assunto:

http://social.msdn.microsoft.com/forums/pt-BR/aspnetpt/thread/d54b5ef6-35e3-4709-807f-f5ba8706274f/

http://www.codeproject.com/KB/viewstate/ServerViewState.aspx

O primeiro simplestemte grava o ViewState em uma variável Session, e lê o valor da mesma. O segundo faz um controle mais minucioso, pois envolve a página e outros controles, só têm um defeito, ele pede a conversão de uma Session em DataTable, se você trabalha com o projeto com a diretiva Strict ativa deve-se converter a Session em DataTable.

Outro método para isso, é compactar o ViewState utilizando o componente GZip do próprio .NET, veja como no link abaixo:

http://www.linhadecodigo.com.br/Artigo.aspx?id=1461

Eu escrevi duas classes que estarei testando, e avalizando o custo x benefício de ambas, assim que eu tiver um resultado volot a postar aqui.

Para baixar, clique ao lado: CompactViewState

Para aplicar automaticamente no seu projeto, crie um Code File no seu projeto web, e altere a herança das páginas ASPX de System.Web.UI.Page para MDViewState ou VSPage, pois ambas já herdam o System.Web.UI.Page.

Outro link interessante sobre o assunto, está em inglês, mas é muito educativo:

http://www.aspnetresources.com/articles/ViewState.aspx

Categories: VB.NET Tags: , , ,