Uma forma de aumentar a rapidez do teu site de forma exponencial é com recurso a cache de pedidos remotos e internos.
Porquê fazer a mesma solicitação à Base de Dado a cada vez que a página é carregada se a mesma raramente muda?
Criei uma função que verifica se há novos conteúdos na cache e retorna o conteúdo de uma fonte se novos conteúdos não estiverem disponíveis.
A Função PHP
/* obtem o conteudo de um ficheiro se ele existir, caso contrário coloca em cache */
function obter_conteudo($ficheiro,$link,$horas = 24,$fn = '',$fn_args = '')
{
//variáveis
$hora_actual = time(); $hora_expira = $horas * 60 * 60; $hora_ficheiro = filemtime($ficheiro);
//decisões
if(file_exists($ficheiro) && ($hora_actual - $hora_expira < $hora_ficheiro)) {
//echo 'retorna a cache do ficheiro';
return file_get_contents($ficheiro);
}
else
{
$conteudo = obter_link($link);
if($fn){ $conteudo = $fn($conteudo,$fn_args); }
$conteudo.= '<!-- cached: '.time().'-->';
file_put_contents($ficheiro,$conteudo);
//echo 'retorna o novo conteudo de '.$link.':: '.$conteudo;
return $conteudo;
}
}
/* obtem o conteudo do link com recurso a curl */
function obter_link($link)
{
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$link);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
$conteudo = curl_exec($ch);
curl_close($ch);
return $conteudo;
}
A minha função obter_conteudo aceita quatro argumentos:
- O ficheiro para obter o conteúdo. Se esse ficheiro não existir, o ficheiro é criado e com esse mesmo conteúdo.
- O LINK do qual vamos obter o conteúdo se o conteúdo que estiver em cache não for recente.
- O nome da função para passar o conteúdo recente.
- Os argumentos a passar para o terceiro argumento da função
A função é, naturalmente, muito “primitiva”.
Porém eu gosto da minha função porque ela tanto trata da recuperação e do armazenamento em cache para que eu não precise de repetir o código sempre que queira colocar conteúdo em cache.
Existem muitas (e mais avançadas) classes em PHP para manipulação de cache disponíveis, mas a minha função acima abrange a maior parte das minhas necessidades.
Espero que também te ajude!




