Otimização do cache em datagrids com paginação - Búfalo Informática
Dica No : 670
Titulo: Otimização do cache em datagrids com paginação
É muito comum montarmos páginas com datagrids paginadas, da mesma forma que é comum usarmos o recurso de outputcache para otimizarmos o acesso a essas páginas.
Porém normalmente usamos o atributo varybyparam="*" , a principio necessário para que a paginação funcione.
Quando usamos esse atributo estamos dizendo que desejamos que o cache seja armazenado de forma distinta para cada conjunto de parâmetros que forem usados para chamar a página. Esses parâmetros, no caso, são os campos hidden, o que inclui o viewState.
Imagine a seguinte sequencia : chamamos a página pelo browser e vemos a grid. Navegamos para a página 3. Navegamos para a página 5. Navegamos novamente para a página 3.
A página 3 já deveria estar em cache e assim evitar processamento, correto ?
Mas não é isso que ocorre ! Porque quando usamos o * no varybyparam incluimos o viewstate como um dos parâmetros. Ao ir da página 1 para a 3 o viewstate tem um valor (estamos na página 1 o viewstate guarda isso), mas quando vamos da página 5 para a 3 o viewstate tem outro valor, consequentemente a página 3 será reprocessada sem necessidade.
Desta forma, para garantirmos uma maior otimização da exibição da grid podemos usar a tag outputcache da seguinte forma :
<%@ outputcache duration="60" varybyparam="__EVENTTARGET" %>
__EVENTTARGET é um campo hidden gerado pelo ASP.NET que contém o nome do objeto que causou o postback. Cada numero de página gera um nome diferente, desta forma conseguimos otimizar o cache para cada página da grid.
- Funcionará apenas se o objeto de paginação da grid estiver exibindo números. Se estiver apenas com next e previous não funcionará
- Funcionará apenas para grids com paginação simples. Se houverem botões ou outros objetos na grid causando postback isso não funcionará.