Opções de caching para SharePoint

Há vários níveis de caching em SharePoint. Neste artigo exploramos 4 tipos diferentes.

Site collection output cache

O que faz?

Guarda páginas renderizadas para utilizadores anónimos e autenticados.

Onde

Site Settings > Site collection output cache (em Site Collection Administration).

Também pode ser definido ao nível de sub sites ou page layouts.

Como

Para controlar quando e como uma página é servida, o Office SharePoint Server 2007 usa tecnologia de caching de ouput nativa ao ASP.NET 2.0. (...)

Cada servidor Web usa a cache de output para guardar o output renderizado de todos os controlos numa derterminada página (...). Enquanto a página é guardada pela cache de output, pedidos seguintes dessa página por parte de utilizadores com permissões similares, são servidos da cache de output (...). A cache de output pode melhorar a perfromance do servidor, porque reduz a actividade dos controlos no servidor e chamadas à base de dados.

Mais informação

É importante escolher o perfil de cache apropriado para o tipo de utilizador (anónimo vs autenticado). O MOSS já vem com diferentes perfis de cache disponíveis para utilização.

Num site público na internet geralmente escolho "Public Internet" para a cache dos utilizadores anónimos e "Extranet" para os utilizadores autenticados.

Também podem definir perfis específicos para publishing sites e page layouts.

Se receberem um erro ao activar a Site collection output cache, vejam o artigo Site collection output cache - List does not exist.

Mais informação sobre como configurar a Site collection output cache pode ser encontrada em Output Caching and Cache Profiles.

Site Collection Output Cache
Site Collection Output Cache

Site collection object cache

O que faz?

Guarda na cache informação de conteúdos, campos e cross list queries.

Onde

Site Settings > Site collection object cache (em Site Collection Administration).

Como

O Office SharePoint Server 2007 suporta caching de certos itens das páginas, como os dados de navegação e informação obtida através de cross-list queries. Fazer o caching de itens de uma página reduz o requisito de ir buscar a informação dos campos à base de dados sempre que uma página é renderizada. O sistema de caching também guarda a informação completa dos campos para uma página, excluindo dados para Web Parts na página.

(...) Ao usar a cache de objectos, podem reduzir significativamente o número de chamadas ao servidor que são necessárias para servir cross-list queries. Isto melhora a performance de funcionalidades como a Content Query Web Part que apresenta resultados de cross-list queries.

Mais informação

Normalmente defino o tamanho da cache de objectos em 200 MB. As outras definições são relacionadas com as cross list queries.

Se estivermos a falar de um site público na internet, normalmente limito os resultados das cross list queries para 60 segundos na cache e mudo o multiplicador para um valor baixo (2 ou 3), dependendo da aplicação.

Para o multiplicador é recomendado usar um valor superior quando há muitas permissões únicas nas listas e um valor inferior quando há muitos utilizadores com as mesmas permissões.

Para obeterem mais informação sobre como gerir a Site collection object cache vejam o artigo Object Caching.

Site Collection Object Cache
Site Collection Object Cache

BLOB cache

O que faz?

Fornece caching para ficheiros como imagens, scripts, styesheets e áudio.

Onde

No web.config, o elemento BlobCache em SharePoint.

Como

(...) os BLOBs são devolvidos da base de dados no primeiro pedido de cada servidor Web e guardados numa pasta no sistema de ficheiros do servidor para o tempo de expiração requerido pelo item específico. Pedidos seguintes são servidos da cache do disco e filtrados baseados na segurança.

Usem a BLOB cache para minimizar chamadas à base de dados quando a base de dados de conteúdos tem muito conteúdo estático (ficheiros .css, ficheiros XML, ficheiros HTML, ou attachments em páginas de artigos). (...) A caching de disco apenas se aplica a itens de bibliotecas de documentos. Se guardarem recursos externamente a uma biblioteca de documentos, por exemplo numa sub-pasta de um site, os itens não vão ser geridos pela cache de disco mesmo que activem a opção para a aplicação Web.

Mais informação

Por omissão está desactivado. É necessário definir uma localização num disco para a cache ser guardada, o tamanho máximo para os ficheiros em cache, as extensões dos ficheiros que devem ser guardados, entre outras opções.

E.g.:

<BlobCache location="D:\data\blob" path="\.(gif|jpg|png|css|js)$" maxSize="2" max-age="86400" enabled="true" />

A propriedade maxSize é em GB (o artigo Caching in Office SharePoint Server 2007 refere erroneamente que o tamanho é em bytes - não é, é em gigabytes). Certifiquem-se que o disco tem espaço suficiente. Por esta razão, é sempre melhor não especificar o disco C.

Existe um problema conhecido com ficheiros em cache não funcionarem para utilizadores anónimos. Isto está relacionado com a forma como o SharePoint serve os ficheiros das bibliotecas de documentos como, por exemplo, a Style Library. Podem encontrar uma solução para este problema em BlobCache, Style Library, and anonymous users.

Para mais informação sobre a BLOB cache leiam o artigo Disk-based Caching for Binary Large Objects.

BLOB Cache
BLOB Cache

Cache-Control HTTP header

O que faz?

Controla a expiração da cache de ficheiros estáticos.

Onde

Internet Information Services (IIS) Manager > Web Sites > Propriedades do web site > HTTP Headers.

Como

O HTTP 1.1 introduziu uma nova classe de cabeçalhos, cabeçalhos de resposta Cache-Control, para permitir aos publicadores Web maior controlo sobre o seu conteúdo e para superar as limitações de Expires.

(...) max-age=[segundos] — especifíca o tempo máximo que uma representação se mantém fresca. Similar ao Expires, esta directiva é relativa ao tempo do pedido e não absoluta. [segundos] é o número de segundos desde o tempo do pedido que desejam que a representação se mantenha fresca.

Mais informação

Há várias propriedades que podem ser definidas para o response header Cache-Control. O Internet Explorer implementa extensões adicionais (post-check/pre-check e no-check). Normalmente definido a propriedade max-age em 3600 segundos (1 hora) com no-check.

Para definir os headers, abram o IIS, vão às propriedades do web site, tab HTTP Headers e adicionem ou alterem um header personalizável.

E.g.

  • Para o seguinte header:
    • cache-control: max-age=3600, no-check
  • Criem um novo HTTP header com as seguintes propriedades:
    • Custom header name: cache-control
    • Custom header value: max-age=3600, no-check

A BLOB cache também define uma idade máxima para os recursos em bibliotecas. No entanto, com esta técnica, isto é aplicado ao site todo.

Mais informação sobre as extensões Cache-Control pode ser vista em Building High Performance HTML Pages e Internet Explorer's Cache-Control Extensions.

Cache-Control HTTP header
Cache-Control HTTP header

Conclusão

Caching pode melhor significativamente a performance de um web site, mas não há quantidade de caching que salve uma má aplicação.

Certifiquem-se que personalizam o esquema de caching à vossa aplicação, porque se não usarem os valores correctos, arriscam-se a reduzir a performance do site (e.g. uso excessivo do disco ou da memória).

Existem outras alternativas que podem explorar. Em web parts ou controlos custom que carregam muitos dados, podem usar as classes de caching do .NET e implementar caching à medida. Também existe o projecto SharePoint Cache (que nunca exprimentei) no CodePlex.

Nuno Freitas
Publicado por Nuno Freitas em 24 dezembro, 2013

Artigos relacionados