terça-feira, 12 de abril de 2011

Capítulo 2: Using Master Pages, Themes, and Caching!!! Lição 3: Caching

Enfim a última lição do 2º Capítulo, Caching!!

Eu ja tive a oportunidade de trabalhar em projetos que usaram ambos tipos de cache explicados nesta lição. Confesso que achei mais fácil a prática do que a teoria, por isso devo escrever pouco sobre este assunto.

O asp.net facilita o uso de Cache, sendo necessário poucas linhas de código para implentar. Existem dois tipos de cache no asp.net:
  • Application caching: representa uma coleção de dados armazenados em memória e que são removidos conforme configurados por tempo ou alguma dependência, ou em ultimo caso quando atingir o limite da memória.
  • Page output caching: acredito ser o mais simples e por isso o mais usado, o asp.net permite salvar uma página, ou até mesmo uma parte de uma página como um controle, para reduzir o tempo de resposta quando esta página for solicitada.
Quando se usa o Application caching o cache é dividido por todos na aplicação, pode ser armazenado qualquer coisa, desde uma string, ou até mesmo uma classe populada, datatable e etc, cabe aqui um parênteses, tome cuidado com o tamanho do objeto que colocam em cache devido a memória.

A codificação para trabalhar com o objeto cache é igual a trabalhar com uma sessão, a forma mais simples basta informar a chave e o valor. Ex:

Cache["Greeting"] = "Hello, cache!";
if (Cache["Greeting"] != null)
  Label1.Text = (string)Cache["Greeting"];
else
  Label1.Text = "Hello, world!";


Existe também o método insert que possui mais parâmetros para você configurar seu objeto cache. O método Insert possui os seguintes parâmetros:
  • dependencies: é possível configurar uma dependência para manter seu objeto cache. Funciona como uma trigger.
  • absoluteExpiration: É um DateTime que define o momento exato que o cache é expirado. Caso não queria definir esta data basta informar: System.Web.Caching.Cache.NoAbsoluteExpiration
  • slidingExpiration: é um objeto TimeSpan, onde você informa depois do último acesso quanto tempo irá demorar para seu cache expirar. O contador é zerado toda vez que o cache é acessado. Se não quiser informar, basta: System.Web.Caching.Cache.NoSlidingExpiration
  • priority: é o nível de prioridade do cache quando houver a necessidade de remoção de conteúdo, como em um possível estouro de memória, o priority é um enumeration e possui as seguintes opções: Low, BelowNormal, Normal (valor padrão), AboveNormal, High e NotRemovable.
Além dessas opções o objeto cache possui também o evento onRemoveCallback que é disparado quando o objeto é removido do cache.

Page output caching 

Para adicionar uma página ao cache para diminuir a carga ao servidor  melhorar o desempenho do site perando o usuário, é possível colocar suas páginas no cache. Para isso basta adicionar a diretiva @OutputCache em sua página. Caso tenha interesse em armazenar somente uma parte da página, você deve separar esta parte em um Web User Controle e desta forma armazenar este controle no cache.

A diretiva OutputCache possui os seguintes parâmetros:
  • Duration: É o número de segundos do cache. É o único parâmetro obrigatório;
  • Location
  • CacheProfile
  • NoStore
  • Shared
  • VaryByParam
  • VaryByControl
  • SqlDependency
  • VaryByCustom
  • VaryByHeader
Por enquanto é isso!!

Abraços...

terça-feira, 5 de abril de 2011

Capítulo 2: Using Master Pages, Themes, and Caching!!! Lição 2: Using Themes

 Esta lição do capítulo fala especificamente como aplicar temas em suas aplicações web. Fala da possibilidade do uso de CSS também, mas não aprofunda no assunto.

Como já vistos em lições anterires o uso de Temas são para facilitar a manutenção do visual da aplicação, podendo alterar em um único local, e principalmente tornar dinâmico o visual de sua aplicação.

Para começar a criar seu Tema, é bem simples, clique com o botão direito no Solution Explorer, clique em Add Asp.Net Folder, em seguinda clique em Theme. Dentro desta pasta Theme você irá criar seus temas personalizados, cada um dentro da respectiva pasta. Exemplo, dentro da pasta Theme crie a pasta Azul e outra chamada Vermelho.

A seguir basta adicionar dentro de cada pasta, arquivos skins, css e imagens. O ideal é criar um tema por completo e depois sair copiando e colando nos demais temas, só editando o que for especifico de cada tema.

Para aplicar o tema a sua página web ou para toda aplicação, existem dois atributos que podem ser usados, Theme e StyleSheetTheme. Você pode definir essas propriedades diretamente no web.config ou nas páginas que achar necessário:

<pages Theme=”themeName”> ou <pages StyleSheetTheme=”themeName”>

Qual a diferença entre ambos?

Quando se o StyleSheetTheme, essas configurações são aplicadas aos controles antes de aplicar possíveis configurações definidas dirementa no controle, ou seja, por ordem de hierarquia irá prevalecer configurações que estiverem diretamente no controle, caso não tenha nenhuma é aplicado as configuraçoes do Tema.
Como é de se imaginar o uso do atributo Theme é o contrário ele sempre irá prevalecer, substituindo qualquer propriedade definida diremante no controle.

Para criar um Arquivo Skin você deve na pasta do seu tema clicar com o botão direito, então, Add New Item. Em seguinda, selecione Skin File e basta definir o nome do seu skin. Existem dois tipos de skin. Default skins são aplicados a todos os controles daquele tipo, ou seja, se você criar um skin para botões, em todos os botões serão aplicadas as configurações. E Named skins que na verdade é o skin mas com um ID, e para um botão receber essas configurações deve obrigatoriamente informar esta ID, caso contrário não receberá as configurações.

Exemplo de Default skins:

<asp:Button runat="server" BackColor="Red" ForeColor="White" Font-Name="Arial" Font-Size="9px" />

Exemplo de Named skins:


<asp:Label runat="server" SkinId="Title" Font-Size="18px" />


Além de arquivos skin, no seu Tema é possível ainda adicionar imagens e arquivos de folhas de estilos, o famoso CSS. Tudo bem simples e sem segredo.

Como ja explicado para adicionar um Tema basta adicionar os atributos Theme ou StyleSheetTheme no web.config ou em sua página.

É possível também definir uma página ou controle que você não quer que seja aplicado o Tema, basta alterar a propriedade EnableTheming para false: EnableTheming="false".

Essa propriedade pode ser aplicada para toda a página ou para controles especificos.

Para aplicar um tema dinamicamente, ou seja, em tempo de execução, você deve fazer isso no evento Page_PreInit e definir a propriedade Page.Theme.

Protected void Page_PreInit(object sender, EventArgs e)
{
  switch (Session["theme"])
  {
    case "Blue":
      Page.Theme = "BlueTheme";
      break;
    case "Pink":
      Page.Theme = "PinkTheme";
      break;
    default:
      Page.Theme = "GreenTheme";
      break;
  }
}

E assim finaliza mais uma lição.

Abraços...