Exportar (0) Imprimir
Expandir Tudo
Expandir Minimizar

Artigos Técnicos :: ASP.NET

Cache de saída em ASP.NET

Por Mauro Sant'Anna ( santanna@mas.com.br ). Mauro é um "MSDN Regional Director"

(http://www.microsoft.com/rd), consultor e instrutor da MAS Informática (www.mas.com.br), tendo ministrado


treinamentos na arquitetura .NET desde outubro de 2000.


O uso dos recursos de cache de saída pode melhorar bastante o desempenho de certos tipos de aplicativos ASP.NET.

Em muitos casos, aplicativos ASP.NET apresentarão respostas bastante específicas a consultas particulares dos usuários. Por exemplo, um sistema de home banking sempre gerará páginas diferentes, pois cada usuário tem um histórico diferente e que muda todo dia.

Por outro lado, alguns aplicativos ou mesmo páginas individuais atendem os seguintes três critérios:

  • A saída é a mesma independentemente do usuário que faz a consulta;

  • A página continua válida por algum tempo, durante o qual vários pedidos iguais são feitos;

  • A página é custosa para ser criada, possivelmente exigindo acesso a bancos de dados.

Alguns exemplos de páginas que atendem os critérios acima são os seguintes:

  • Home pages não personalizadas de portais;

  • Lista de preços;

  • Lista interna de telefones de uma empresa.

Para este tipo de páginas, podemos ativar o "cache de saída". O cache de saída armazenará a página já pronta por algum tempo, durante o qual os novos pedidos da mesma página serão satisfeitos a partir de um "depósito de páginas" o cachê, sem o custo adicional de rodar novamente a página e melhorando o desempenho.


Este cache existe no servidor Web e não tem nada a ver com o cache de página do navegador ou de servidores de proxy que eventualmente existam. Neste caso a página será sempre pedida novamente a partir do servidor e viajará até o cliente. Não estamos economizando largura de banda da rede e sim capacidade de processamento do parque de servidores.

Podemos ativar o cache de saída de duas maneiras:

  • Com código de programação;

  • Alterando o cabeçalho do arquivo "aspx".

Código

Uma das maneiras de ativar o cachê de saída é incluir código na página para indicar que a página deve ser "cacheada" no servidor e também qual é a sua duração com os seguintes comandos:

' Indica uso do cache de saída no servidor
Response.Cache.SetCacheability(HttpCacheability.Server)
' Indica que a página sera válida por dez segundos
Response.Cache.SetExpires(DateTime.Now.AddSeconds(10))

Alterando o cabeçalho


Esta é outra maneira de ativar o cache de saída. Neste caso iremos alterar o arquivo ".asmx" e adicionar o seguinte à segunda linha de código:

<%@ OutputCache Duration="10" VaryByParam="None" %>

Observe o texto dentro do quadro vermelho na página:

aspnet_cache_1.gif

Ambas as opções, OutputCache Duration e VaryByParam devem estar presentes, não existindo valores padrões caso alguma seja omitida. O significado de cada opção é o seguinte:

  • OutputCache Duration: Indica por quanto tempo a página será armazenada, em segundos;

  • VaryByParam: Indica um parâmetro na "query string" que causará uma cópia da página ser armazenada para cada parâmetro, permitindo que se faça cache de páginas ligeiramente diferentes dependendo de um parâmetro.

Qual das duas formas usar?

As duas formas de ativação do cache de saída funcionam perfeitamente. Eu pessoalmente prefiro a primeira, pois acredito que mexer muito na página "aspx" foge do "espírito RAD" do ASP.NET, embora a segunda maneira não tenha nenhum problema.


Exemplo

Faremos um exemplo muito simples, apenas exibindo a data e hora do sistema. Se não usarmos o cache, a resposta será atualizada a cada pedido de página. Se o cache estiver sendo usado, a resposta será diferente a cada vez que a página for pedida.

Crie um novo projeto ASP.NET em Visual Basic:

aspnet_cache_2.gif

Acrescente um componente Label e limpe a propriedade Text:

aspnet_cache_3.gif

Clique com o botão direito e peça "View Code". Acrescente o seguinte código ao evento Page_Load:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Label1.Text = DateTime.Now.ToString()
End Sub

Rode o programa e observe que o navegador apresentará a data e hora atualizada a cada vez que a página for exibida:

Cc517984.aspnet_cache_4(pt-br,MSDN.10).gif

Por enquanto não estamos usando o cache. Agora acrescente agora o código para ativar o cache:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' Indica uso do cache de saída no servidor
    Response.Cache.SetCacheability(HttpCacheability.Server)
    ' Indica que a página sera válida por dez segundos
    Response.Cache.SetExpires(DateTime.Now.AddSeconds(10))
    Label1.Text = DateTime.Now.ToString()
End Sub

Vá ao navegador e peça para atualizar a página, clicando F5 repetidamente. Note que a página será alterada mais ou menos a cada dez segundos.

Ao invés de acrescentar o código que mexe no objeto Response, poderíamos ter colocado a diretiva "@OutputCache" na página aspx, como mostrado a.

WebServices

Assim como páginas "aspx", as páginas "asmx" também podem ser armazenadas em cache. No caso dos WebServices, a maneira de ativá-lo é passando o argumento CacheDuration ao atributo WebMethod, como no exemplo a seguir:

<WebMethod(CacheDuration:=10)> Public Function PegaHora() As String
    Return DateTime.Now.ToString()
End Function

Conclusão

O uso do cache de saída em aplicativos ASP.NET e também em WebServices pode melhorar bastante a performance de alguns tipos de aplicativos.

Faça o download deste documento:

Cache de saída em ASP.NET

GR1868.gif  formato Word, 75 Kb    

Mostrar:
© 2015 Microsoft