{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}
12/11/2010
Hello there! Seguindo com as novidades do ASP.NET MVC 3 e do Release Candidate lançado dia 09/11, neste post mostrarei o output cache para pedaços de uma página, ou child actions.
O ASP.NET MVC já possuía output cache em suas versões anteriores, mas o cache era feito do output inteiro. Agora é possível especificar que o resultado de uma action deverá ser mantido em um cache de retorno, e quando esta action for renderizada utilizando Html.RenderAction ou Html.Action esse resultado poderá vir do cache.
Agora no Release Candidate do ASP.NET MVC 3 foi disponibilizado um atributo para ser colocado nas actions que define se ela deve ser mantida no output cache.Vamos ver um exemplo:
[OutputCache(Duration = 30, VaryByParam = "none")]
public DateTime ActionComCache(){
return DateTime.Now;
}
O que estamos fazendo, primeiro, é marcando a action com o atributo OutputCache. Configuramos a duração do cache em segundo, usando o parâmetro Duration. Neste caso, 30 segundos.O parâmetro VaryByParam serve para dizer quais oa parâmetros influenciam na composição do cache, neste caso estamos dizendo que o cache não vai variar de acordo com parâmetros, até por que a action não recebe nada.Na minha view eu tenho:
@using System.Threading;
<!DOCTYPE html SYSTEM><html><head> <title>ActionComCache</title></head><body> <div> @for(int i=0;
i<10;
i++){ Thread.Sleep(4000);
<text>E a hora de geração é: @Html.Action("ActionComCache")</text><br /> }
</div></body></html>
O que fazemos é renderizar o resultado da action ActionComCache. Veja que estou dando um Sleep na thread para que possamo ver o cache em ação:
Reparem que na parte azul da imagem temos o resultado da nossa action utilizando um primeiro momento no cache. Ou seja, não foi executada a action várias vezes, mas sim foi pego o resultado do output desta action que estava no cache. Quando os 30 segundos configurados expiraram, a action foi novamente executada e seu output colocado no cache, como pode ser visto na parte vermelha.É isso galera, depois escreverei mais sobre o Output cache, sobre a variação por parâmetros, etc.Este é um recurso interessante se usado de maneira correta. Não precisamos cair na idéia de colocar tudo no cache para "melhorar o desempenho". Analise cada caso com cuidado.
Abraços, Vinicius Quaiato.