Em um artigo anterior abordei em detalhes o novo mecanismo de cache que integra o ASP.NET 5, a partir de um exemplo envolvendo o uso de instâncias baseadas na interface IMemoryCache (namespace Microsoft.Framework.Caching.Memory). Contudo, o armazenamento de recursos em cache nesta nova versão não está restrito somente a esta alternativa. Agora também é possível a utilização de uma tag chamada cache no código de Views, de maneira que porções do conteúdo destas estruturas possam ser reaproveitadas dentro de um intervalo de tempo pré-determinado.

O objetivo deste novo post é apresentar esta nova opção disponibilizada pelo ASP.NET 5, através de um exemplo demonstrando a utilização da tag cache em uma aplicação MVC 6.

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

Para demonstrar o uso da tag cache será gerada uma solução que emprega os 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á criado, tendo por nome TesteCacheViewsASPNET5 (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).

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

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

Na Listagem 1 está o trecho de código que deverá ser incluído na View Index. A idéia com este ajuste será demonstrar quais partes da View ficarão ou não armazenadas em cache:

  • Um primeiro bloco será atualizado toda vez que uma requisição HTTP for direcionada à Action Index de HomeController;
  • Já um segundo trecho de código contido dentro da tag cache será vinculado ao cache da aplicação, de forma que seu conteúdo permaneça armazenado para reuso durante 2 minutos (valor este indicado no atributo expires-after e que independe de eventuais acessos durante o período especificado).
...

<h3>
    <b>Data/Hora da última atualização da View:</b>
    @DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")
</h3>

<cache expires-after="@TimeSpan.FromMinutes(2)">
    <h3>
        <b>Exemplo de utilização de cache na View:</b>
        @DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")
    </h3>
</cache>

Listagem 1: View Index.cshtml (Controller HomeController)

Outros atributos disponíveis para uso com a tag cache podem ser observados na próxima tabela:

Atributo Finalidade
expires-on Possibilita que a validade do bloco a ser armazenado em cache expire após um período de tempo específico, representando por um valor do tipo DateTime.
ser especificado para esse atributo um intervalo de tempo o qual corresponde a um valor do tipo TimeSpan."
vary-by-user Indica, através de um valor booleano (true ou false), que o armazenamento em cache irá variar de acordo com cada usuário da aplicação.
vary-by-route Especifica que o armazenamento em cache está atrelado aos diferentes valores que representam uma rota, sendo especificado através de uma lista com os nomes dos parâmetros correspondentes.
vary-by-query Possui funcionamento similar ao atributo anterior, embora considere como chaves as diferentes partes que formam uma query string.
vary-by-cookie Vincula o armazenamento em cache a valores indicados em um cookie.
vary-by-header Associa o armazenamento em cache a headers especificados em uma requisição HTTP.
vary-by Condiciona o armazenamento em cache a uma string específica definida por um desenvolvedor.
priority Permite indicar a prioridade de um elemento em cache (mais especificamente durante um procedimento de limpeza deste mecanismo), com base em um valor do enumeration CachePreservationPriority (namespace Microsoft.Framework.Caching.Memory).

Considerando todas as opções apresentadas para a tag cache, o normal é que se combinem estes atributos conforme as necessidades de cada projeto. Um exemplo disto seria a utilização dos atributos expires-after e vary-by-user, de forma que o cache expire dentro de um intervalo de tempo para cada usuário conectado a um site.

Teste da aplicação criada

Na Imagem 3 está a tela inicial da aplicação TesteCacheViewsASPNET5. Em vermelho foi destacada a porção de HTML que ficará armazenada em cache.

cacheviews-03
Imagem 3: Tela inicial da aplicação TesteCacheViewsASPNET5

Após pouco mais de 1 minuto, um refresh na tela inicial fará com que a Action Index seja acionada novamente. No entanto, a Imagem 4 mostra que o trecho delimitado pela tag cache permaneceu inalterado, ao passo que o bloco de código anterior foi novamente processado.

cacheviews-04
Imagem 4: Novo refresh, com o trecho delimitado pela tag cache inalterado

Finalmente, após um tempo superior a 2 minutos, um refresh da página inicial fará com que o trecho contido dentro da tag cache seja atualizado (como mostrado na Imagem 5).

cacheviews-05
Figura 5: Novo refresh, com o bloco delimitado pela tag cache sendo atualizado após 2 min

Conclusão

A tag cache é mais um dos novos recursos para a manipulação de cache que integram o ASP.NET 5. Permitindo que partes de uma View sejam atreladas a este mecanismo de armazenamento temporário, tal recurso representa uma alternativa adicional para uso em soluções Web que exijam uma melhor performance no processamento de requisições.

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