terça-feira, 27 de junho de 2017

Criando cache para as rotas no slim


Sabe quando você esta desenvolvendo sua aplicação, e você percebe que uma determinada rota recebe um monte de requisições sempre com o mesmo parâmetro, aquele momento em que seu webservice recebe um monte de requisições pra retornar a lista de produtos da empresa, que praticamente nunca muda?

É nessas horas que você precisa pensar em cache ( tá o exemplo pode não ser dos melhores, mas você entendeu tenho certeza..rs).

Configurar cache no slim é muito fácil. nas configurações da aplicação, basta setar um nome válido na propriedade routerCacheFile. Da uma olhadinha abaixo como fica:


$config = [
    'settings' => [
        'addContentLengthHeader' => false,
        'displayErrorDetails' => true, // set to false in production
        'routerCacheFile' => __DIR__ . '/../routes.cache.php',
    ],
];
 
$app = new Slim\App($config);

É importante lembrar que todo este cache não tem nenhum controle hein, então pra renovar o cache o mesmo terá de ser apagado (obvio que você pode criar um mecanismo para isso né :)). No artigo que estou usando como base para transcrever este exemplo aqui, tem um exemplo que cria as rotas, e as armazena, com um pequeno teste de performance:


 [
        'addContentLengthHeader' => false,
        'displayErrorDetails' => true, // set to false in production
        'routerCacheFile' => __DIR__ . '/../routes.cache.php',
    ],
];
 
$app = new Slim\App($config);
 
for ($groupName = 1; $groupName <= 25; $groupName++) {
    $app->group("/$groupName", function() {
        for ($i = 1; $i <= 1000; $i++) {
            $this->get("/$i/{id:\d+}", App\Action::class);
            $this->post("/$i/{id:\d+}", App\Action::class);
            $this->put("/$i/{id:\d+}", App\Action::class);
            $this->delete("/$i/{id:\d+}", App\Action::class);
        }
    });
}
 
// Run!
$start = microtime(true);
$app->run();
$diff = microtime(true) - $start;
echo "\n" . sprintf("%0.03f", $diff * 1000);

O que ele esta fazendo, é criar as rotas dinamicamente. Faça um teste acesse uma rota 2 vezes, vai ser notávle o o ganho de performance. Depois venho escrever um artigo usando o http_cache no slim, mostrando como criar rotas com datas de validade :). POST original: https://akrabat.com/slims-route-cache-file/
Jonas Thomaz de Faria Web Developer

Trabalhando com TI a muitos anos, atualmente apaixonado pelo slim framework e por Dark Souls 2 =D.