Em dois artigos anteriores abordei novidades do mecanismo de cache do ASP.NET 5, com exemplos nos quais demonstrava a utilização de instâncias da interface IMemoryCache e da tag cache em Views de projetos MVC 6. O objetivo deste novo post é apresentar o atributo ResponseCache, o qual permite o armazenamento para reuso do conteúdo de uma View (considerando para isto um intervalo de tempo pré-determinado).

Exemplo de utilização em uma aplicação MVC 6

Para demonstrar o uso do atributo ResponseCache será criada uma solução que faz uso dos seguintes recursos:

  • O Microsoft Visual Studio 2015 Release Candidate como IDE de desenvolvimento;
  • O .NET Framework 4.6;
  • O framework ASP.NET 5 para a criação de uma aplicação MVC 6.

Um projeto do tipo “ASP.NET Web Aplication” será gerado, tendo por nome “TesteResponseCacheASPNET5” (Imagem 1). Ao se confirmar este primeiro passo, selecionar na sequência em “ASP.NET 5 Preview Templates” a opção “Web Site” (Imagem 2).

response-cache-01
Imagem 1: Criando uma ASP.NET Web Application no Visual Studio 2015

response-cache-02
Imagem 2: Selecionando o template Web Site no Visual Studio 2015

O atributo ResponseCacheAttribute encontra-se definido no namespace Microsoft.AspNet.Mvc, devendo ser associado a Actions cujas Views correspondentes ficarão armazenadas em cache por um limite de tempo específico. Na Listagem 1 é possível observar o uso desta estrutura na Action Index da classe HomeController, tendo sido indicado um tempo de 60 segundos através do parâmetro Duration.

using Microsoft.AspNet.Mvc;

namespace TesteResponseCacheASPNET5.Controllers
{
    public class HomeController : Controller
    {
        [ResponseCache(Duration = 60)]
        public IActionResult Index()
        {
            return View();
        }

        ...
    }
}

Listagem 1: Classe HomeController

OBSERVAÇÃO: Por convenção, nomes de classes que representam atributos terminam com o sufixo Attribute. A utilização de expressões que envolvam um atributo vinculando o mesmo a uma estrutura de código dispensa o uso de tal sufixo ao final do nome. Logo, ao se empregar o atributo ResponseCacheAttribute, o método marcado com essa construção estará associado apenas a uma instrução com o valor “ResponseCache” (entre colchetes).

Além de Duration, outros parâmetros disponíveis para uso com o atributo ResponseCache estão listados na próxima tabela:

Parâmetro Finalidade
CacheProfileName Nome de um profile utilizado para armazenamento em cache.
Location Define em que local os dados serão armazenados em cache, utilizando para isto um valor baseado no enumeration ResponseCacheLocation. Dentre os possíveis valores para ResponseCacheLocation estão: Any (combinação envolvendo armazenamento na memória do servidor e no browser do usuário que está acessando um recurso), Client (armazenamento restrito ao browser do usuário) e None (sem cache).
NoStore Valor booleano que permite desativar o mecanismo de cache (quando preenchido como 'true').
Order Ordem do MVC Filter representado pelo atributo ResponseCache.
VaryByHeader Associa o armazenamento em cache a headers especificados em uma requisição HTTP.

Já na Listagem 2 está um trecho de código a ser incorporado à View Index. A ideia com este ajuste será exibir quando tal View foi armazenada em cache pela última vez (por meio da propriedade Now do tipo DateTime), bem como qual o horário em que a página foi acessada a partir de um browser (através de um conjunto de instruções especificadas no método ready).

...

<script type="text/javascript">

    $(document).ready(function () {
        $('#lblHorario').text(new Date().toLocaleTimeString());
    });

</script>

<h3>
    <b>Horário da última atualização da View:</b>
    @DateTime.Now.ToString("HH:mm:ss")
</h3>

<h3>
    <b>Horário de acesso à View (atualizado via JavaScript):</b>
    <label id="lblHorario" style="font-weight: normal;"></label>
</h3>

Listagem 2: View Index.cshtml (Controller HomeController)

Teste da aplicação criada

Na Imagem 3 está a tela inicial da aplicação TesteResponseCacheASPNET5. Em vermelho encontram-se destacados o horário em que a View foi processada, bem como o momento em que a função JavaScript foi acionada (durante a abertura da página no browser).

response-cache-03
Imagem 3: Tela inicial da aplicação TesteResponseCacheVS2015

Acessando a mesma página inicial em uma outra janela e após alguns segundos, será possível notar que o horário de atualização da View permanece inalterado (Imagem 4). A única mudança visível refere-se ao horário atualizado via JavaScript, ajuste este realizado a partir do browser quando do carregamento da página.

response-cache-04
Figura 4: Novo refresh, com a página inicial ainda em cache

Com um novo acesso após um tempo superior a 1 minuto acontecerá, finalmente, uma atualização do conteúdo em cache associado à View Index (Imagem 5).

response-cache-05
Figura 5: Novo refresh, com atualização do conteúdo (View) armazenado em cache

Conclusão

Conforme já discutido nos artigos anteriores, o mecanismo de cache do ASP.NET 5 passou por uma reformulação considerável. Contando com um comportamento similar ao do recurso OutputCache em versões anteriores do ASP.NET MVC, o atributo ResponseCache é mais uma das opções que podem auxiliar os desenvolvedores na construção de soluções com uma maior performance.

Espero que este conteúdo possa ter sido útil.

Até uma próxima oportunidade!

Referências

ASP.NET 5 Documentation
http://docs.asp.net/en/latest/

Visual Studio 2015: Implementando uma aplicação ASP.NET MVC 6
http://www.devmedia.com.br/visual-studio-2015-implementando-uma-aplicacao-asp-net-mvc-6/32265

Renato Groffe

Atua como consultor em atividades voltadas ao desenvolvimento de softwares há mais de 13 anos. Bacharel em Sistemas de Informação, com especialização em Engenharia de Software. Microsoft Certified Technology Specialist (Web, WCF, Distributed Applications, ADO.NET, Windows Forms), Microsoft Specialist (HTML5 with JavaScript and CSS3, Developing ASP.NET MVC 4 Web Applications), Oracle Certified Associate (PL/SQL), Sun Certified (SCJP, SCWCD), ITIL Foundation V2, Cobit 4.1 Foundation.

Facebook Google+ 

Comentários

comentarios