Para administradores

Como administrador, o Joomla oferece-lhe a capacidade de colocar em cache partes do seu sítio. Pode optar por colocar em cache páginas web inteiras ou apenas partes dessas páginas. Este guia explica como fazê-lo.

Numa página web de um sítio Joomla existem 3 coisas que podem ser colocadas em cache:

  1. A própria página inteira — a cache de página
  2. O resultado do componente Joomla dessa página web — conhecida como cache de vista
  3. O resultado dos módulos exibidos nessa página — conhecida como cache de módulo

Existem várias configurações de cache que lhe permitem controlar o que é colocado em cache:

  1. O plugin de sistema "Sistema — Cache de página"
  2. A Configuração global, separador Sistema, Configurações de cache. Aqui a opção Cache do sistema pode ser definida como
    • DESLIGADO — Cache desativada
    • LIGADO — Cache conservadora
    • LIGADO — Cache progressiva
  3. Muitos módulos têm, nas suas opções, um separador Avançado no qual a Cache pode ser definida como Utilizar global ou Sem cache

Como se descreve abaixo, existem também regras de cache implementadas no código do Joomla, sobre as quais não tem controlo.

Pode limpar a cache através do menu Administrador → Sistema → Limpar cache. De um modo geral, pode considerar-se que o Joomla tem 3 níveis de cache, com agressividade crescente

  1. Cache conservadora
  2. Cache progressiva
  3. Cache de página

Além disso, os programadores do Joomla podem utilizar funcionalidades de cache para armazenar o resultado de consultas à base de dados, por exemplo, para aumentar a capacidade de resposta do sítio, mas isso está fora do âmbito das capacidades do administrador.

Cache de página

Para ativar isto, vá a Administrador → Extensões → Plugins. Depois encontre o plugin Sistema — Cache de página e ative-o. Isto significa que as páginas do sítio passarão a ser colocadas em cache e, sempre que forem novamente solicitadas, a página em cache será apresentada, em vez de ser gerada pelo Joomla a partir da informação na base de dados. A página em cache continuará a ser apresentada até expirar — conforme definido pelo parâmetro Tempo de cache em Administrador → Configuração global → separador Sistema → Configurações de cache.

Se está a ler esta página como tutorial e quer testar a cache de página, o melhor é definir as configurações de cache da Configuração global para:

  • Gestor de cache — Ficheiro
  • Caminho para a pasta de cache — deixar em branco
  • Tempo de cache — 15 (o valor predefinido de 15 minutos)
  • Cache específica da plataforma — Não
  • Cache do sistema — DESLIGADO — Cache desativada

Para verificar que a cache de página está a funcionar, vá a uma página do sítio que exiba um artigo. Após exibir essa página, deverá encontrar no sistema de ficheiros um diretório cache/page com um ficheiro cujo nome é algo como xxx-cache-page-yyy.php, em que xxx e yyy são longas cadeias de hash. O Joomla tem de armazenar páginas de cache separadas para URL diferentes, pelo que a segunda cadeia de dígitos hexadecimais é um hash do URL da página web do sítio, para tornar o nome do ficheiro único para essa página.

Depois use a funcionalidade do Administrador para alterar o texto desse artigo e volte a exibir a página web do sítio. Deverá encontrar a versão em cache, e não o seu texto modificado.

Alterar um artigo (ou outro item do Joomla) não limpa a cache de página da(s) página(s) web onde esse artigo é exibido. Para limpar a cache de página, vá a Administrador → Sistema → Limpar cache. Clique na caixa de verificação junto ao Grupo de cache chamado "page" e prima o botão Eliminar. Quando voltar a exibir a sua página web, esta deverá mostrar agora o seu texto corrigido.

Se o seu sítio tiver uma função como um carrinho de compras, aplicar a cache de página causará problemas, pois as páginas têm de mostrar o que o cliente já selecionou, em vez de exibir uma página em cache que é comum a todos. No entanto, pode configurar o plugin Sistema - Cache de página para excluir da cache Itens de menu específicos ou URL e intervalos de URL específicos (no separador Avançado), para que apenas as páginas verdadeiramente estáticas sejam colocadas em cache.

Cache conservadora

Com a Cache conservadora pode colocar em cache a saída da vista dos componentes e a saída dos módulos que permitem cache. Mas note que isto só funcionará em páginas que não estejam em cache através da cache de página. Nessas páginas, a página web inteira é colocada em cache, e a cache conservadora nem sequer é considerada.

Para ativar a cache conservadora:

  1. Vá a Administrador → Sistema → Configuração global → separador Sistema e, em Configurações de cache, defina a Cache do sistema como LIGADA – Cache conservadora
  2. Vá a Administrador → Extensões → Módulos e selecione os módulos que deseja colocar em cache. Se esse módulo permitir cache, então no separador Avançado deverá conseguir definir a Cache como
  • Utilizar global – este módulo será colocado em cache (com a opção global agora definida como Cache conservadora)
  • Sem cache – este módulo não será colocado em cache.

(Note que o Tempo de cache na Configuração global está em minutos, mas o Tempo de cache nas configurações do módulo está em segundos.)

Para verificar que está a funcionar, vá ao seu sítio, certifique-se de que tem a sessão terminada, e navegue até uma página web que exiba um artigo. Verifique o seu sistema de ficheiros e deverá encontrar uma pasta cache/com_content contendo um ficheiro de cache.

Também encontrará outros diretórios, como cache/com_languages (uma vez que exibir a página envolve carregar o idioma atual, e este também será colocado em cache) e ainda diretórios relacionados com a cache de módulo, por exemplo cache/com_modules. Estes resultam do uso de cache que os programadores codificaram dentro da aplicação Joomla.

Se editar e guardar esse artigo e depois atualizar a página do sítio, verá que o sítio exibe o texto atualizado desta vez. Isto deve-se ao facto de que, sempre que a edição é guardada, o Joomla limpa a cache para esse artigo.

No entanto, pode demonstrar que a cache está a funcionar se editar o ficheiro de cache no diretório cache/com_content usando um editor de texto básico. Usando o editor, altere uma letra no texto do artigo dentro do ficheiro de cache e guarde o ficheiro. Depois, ao atualizar a página web, deverá ver a alteração que fez ao ficheiro de cache.

Como pode selecionar quais as vistas dos componentes que são colocadas em cache, e em que circunstâncias? Infelizmente, não pode fazer isto. Isto é determinado pelos programadores do componente nuclear do Joomla e codificado no código PHP do componente. Os critérios são diferentes para cada componente. No entanto, pode facilmente descobrir que critérios são usados porque, para cada um dos componentes do sítio, estes estão codificados no ficheiro DisplayController.php do sítio. Por exemplo, no momento desta revisão (Joomla versão 5), para o componente Contactos encontramos em components/com_contact/src/Controller/DisplayController.php

    public function display($cachable = false, $urlparams = [])
    {
        if ($this->app->getUserState('com_contact.contact.data') === null) {
            $cachable = true;
        }

Isto significa que as vistas associadas aos contactos serão colocadas em cache, a menos que existam dados de sessão identificados por com_contact.contact.data – o que acontecerá se, na sessão do utilizador, este tiver exibido um formulário de contacto (por exemplo, numa página apontada por um item de menu do tipo Contactos → Contacto único).

O ficheiro equivalente para artigos components/com_content/src/Controller/DisplayController.php contém:

    public function display($cachable = false, $urlparams = false)
    {
        $cachable = true;

        /**
         * Set the default view name and format from the Request.
         * Note we are using a_id to avoid collisions with the router and the return page.
         * Frontend is a bit messier than the backend.
         */
        $id    = $this->input->getInt('a_id');
        $vName = $this->input->getCmd('view', 'categories');
        $this->input->set('view', $vName);

        $user = $this->app->getIdentity();

        if (
            $user->get('id')
            || ($this->input->getMethod() === 'POST'
            && (($vName === 'category' && $this->input->get('layout') !== 'blog') || $vName === 'archive'))
        ) {
            $cachable = false;
        }

A expressão $user->get('id') é verdadeira se este for um utilizador com sessão iniciada. Isto significa que os artigos nunca são colocados em cache para utilizadores com sessão iniciada. As expressões subsequentes dizem respeito a outras condições em que a cache não é realizada, mesmo que o utilizador não tenha sessão iniciada.

Desta forma, pode descobrir as circunstâncias em que a cache é realizada, mas não é aconselhável alterá-las. Também pode demonstrar que os módulos estão a ser colocados em cache utilizando o módulo Joomla Breadcrumbs, garantindo que é exibido numa posição de módulo na página web, definindo a sua opção de cache e editando manualmente o ficheiro em cache em cache/mod_breadcrumbs.

Cache progressiva

Tal como a Cache conservadora, a cache progressiva também coloca em cache o resultado das vistas de componentes e dos módulos. A diferença funcional entre as duas é que, com a cache progressiva, para utilizadores sem sessão iniciada, todos os módulos são sempre colocados em cache. Neste caso, definir a opção Sem cache para um módulo não tem efeito. Se a opção de armazenamento de cache estiver definida como Ficheiro, pode encontrar o ficheiro de cache dos módulos (o resultado de todos os módulos é armazenado dentro do mesmo ficheiro) dentro do diretório cache/com_modules.

Para ativar a Cache progressiva, vá a Administrador → Sistema → Configuração global → separador Sistema e, dentro de Configurações de cache, defina Cache do sistema como ATIVADO – Cache progressiva.

No que diz respeito às condições de cache das vistas de componentes nucleares do Joomla, não existe diferença entre a cache conservadora e a cache progressiva. Apesar do que possa ler em alguns sítios web e respostas a perguntas no Stack Overflow, não é o caso de a Cache conservadora se relacionar com quando o utilizador não tem sessão iniciada e a Cache progressiva com quando o utilizador tem sessão iniciada.

Resumo

Abaixo está um resumo dos tipos de cache.

Cache de página completa

  • Configuração: Plugin incorporado (Administrador → Extensões → Gestor de plugins → System - Page Cache)
  • Coloca em cache: cada página completa do seu sítio
  • Baseado em: URL
  • Mais informações:
    • Cache opcional do navegador: Também coloca em cache no navegador/computador dos seus visitantes
    • Apenas coloca em cache páginas para visitantes convidados (não para visitantes com sessão iniciada). Tenha cuidado ao utilizar este plugin se tiver um sítio interativo onde pretenda servir conteúdo com base em informações de sessão/cookie em vez de apenas no URL simples. Funcionalidades como um carrinho de compras não funcionarão.

Cache de vista

  • Configuração: Configuração global -> Cache
  • Coloca em cache: cada vista de um componente
  • Baseado em: URL, vista, parâmetros, ...
  • Mais informações: Os programadores de componentes têm de incluir isto no seu código para funcionar. Na maioria das vezes, isto não é feito. O componente principal de conteúdo do Joomla utiliza isto, mas apenas para visitantes convidados do seu sítio, embora isto não seja obrigatório para todos os componentes.

Cache de módulo

  • Configuração: Configuração global -> Cache
  • Caches: cada módulo (personalizado individualmente através dos parâmetros avançados de cada módulo)
  • Baseado em: o id do módulo, os níveis de visualização do utilizador e o parâmetro Itemid no pedido HTTP
  • Mais informações: Deve desativá-la em alguns módulos para evitar problemas

Mais cache

Se quiser conhecer outros sistemas de cache e possibilidades, poderá querer consultar as extensões de terceiros relacionadas com cache.

Motores ou armazenamentos de cache

  • Configuração: Configuração global -> Cache

Aqui pode escolher qual o sistema que pretende que o seu sítio utilize para toda a cache. Algumas opções são: APC, Eaccelorator, File, Memcache, Redis, XCache.

O APC, por exemplo, também armazena em cache o seu opcode PHP.

Para programadores

Esta secção precisa de ser revista para o Joomla! 4/5.

A classe JCache permite muitos tipos e níveis diferentes de cache. As subclasses seguintes foram criadas especificamente, mas pode adicionar as suas próprias, ou utilizar a principal de muitas formas diferentes.

Não se esqueça que o primeiro nível de cache encontrado irá sobrepor-se a qualquer cache mais profunda. Suponho que demasiados níveis também é contraproducente (ainda por verificar).

  • JCacheView armazena em cache e devolve a saída de uma determinada vista (em MVC). Um id de cache é gerado automaticamente a partir do URI, da vista específica e do seu método específico, ou pode indicar o seu próprio.

Isto pode ser feito automaticamente através da função display do controlador base. Por exemplo, no controlador do seu componente:

class DeliciousController extends JController {
    function display() {
        parent::display(true); //true asks for caching.
    }
}

Há também alguns urlparams a considerar. Consulte este Joomla StackExchange

Além disso, tenha em atenção que quaisquer atualizações (como visualizações ou contagens de visitas) NÃO serão atualizadas (a menos que adicione isto fora deste método e, por conseguinte, fora de qualquer parte mais profunda do MVC).

  • JCachePage armazena em cache e devolve o corpo da página.
  • JCacheCallback armazena em cache e devolve a saída e os resultados de funções ou métodos.

Se quiser colocar consultas em cache, esta é uma boa classe para isso, como ilustrado aqui: Utilizar a cache para acelerar o seu código

  • JCacheOutput armazena em cache e devolve a saída.

Esta destina-se antes a armazenar em cache uma parte específica de código PHP. Funciona como um buffer de saída, mas em cache.