Otimização de desempenho de aplicações PHP: guia prático para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que a velocidade é importante?



Imagine que seu site demora mais de 3 segundos para carregar. De acordo com o Google, 53% dos usuários o abandonarão e a conversão cairá 20%. Para um desenvolvedor PHP, saber otimizar uma aplicação não é apenas "boa prática", mas uma necessidade. Mesmo que você esteja apenas começando, técnicas básicas de aceleração de código ajudarão você a criar projetos rápidos e responsivos.



Neste artigo, abordaremos 4 direções principais: desde caching e trabalho com bancos de dados até configuração de servidor e profiling. Você receberá exemplos de código prontos e uma checklist para implementação.



1. Caching: salvando o resultado, em vez de recalcular do zero



Caching é como fazer uma "cola" antes da prova. Em vez de calcular dados complexos repetidamente, nós os salvamos em um armazenamento rápido.



1.1. Caching em memória (Memcached / Redis)

Para dados que raramente mudam (como uma lista de categorias ou configurações), o caching em memória RAM é ideal.



<?php// Exemplo com Memcached$memcached = new Memcached();$memcached->addServer('localhost', 11211);

$key = 'categories_list';$categories = $memcached->get($key);

if ($categories === false) { // Dados não estão em cache — obtém do BD $categories = $db->query("SELECT * FROM categories")->fetchAll(); // Salva por 1 hora (3600 segundos) $memcached->set($key, $categories, 3600);}

// Usa $categoriesforeach ($categories as $cat) { echo $cat['name'];}?>


1.2. Caching de fragmentos HTML (Output Buffer)

Se você tem blocos pesados (widgets, menus), armazene em cache o HTML pronto.



<?phpfunction getCachedWidget($widgetName, $ttl = 300) {    $cacheFile = __DIR__ . '/cache/' . md5($widgetName) . '.html';        if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $ttl) {        return file_get_contents($cacheFile);    }        ob_start();    // Aqui o código que gera o widget    echo "<div class='widget'>Conteúdo complexo...</div>";        $html = ob_get_clean();    file_put_contents($cacheFile, $html);        return $html;}

echo getCachedWidget('sidebar_menu');?>


2. Otimização de consultas ao banco de dados



O gargalo mais comum em aplicações PHP é o banco de dados. Uma única consulta mal feita pode "matar" a performance de todo o site.



2.1. Use índices

Sem um índice, o MySQL é forçado a escanear a tabela inteira. Adicione índices nos campos que participam de WHERE, JOIN e ORDER BY.



-- Ruim: varredura completaSELECT * FROM users WHERE email = 'test@test.com';

-- Bom: usa índiceCREATE INDEX idx_email ON users(email);SELECT * FROM users WHERE email = 'test@test.com';


2.2. Evite consultas N+1

Este é um erro clássico: em um loop, você consulta o BD para cada elemento.



<?php// RUIM: N+1 consultas$users = $db->query("SELECT * FROM users")->fetchAll();foreach ($users as $user) {    $orders = $db->query("SELECT * FROM orders WHERE user_id = " . $user['id']);    // ...}

// BOM: uma única consulta com JOIN$users = $db->query(" SELECT u.*, o.* FROM users u LEFT JOIN orders o ON u.id = o.user_id")->fetchAll();?>


2.3. Lazy Loading (Carregamento Preguiçoso)

Não carregue dados que não são necessários agora. Use paginação ou LIMIT.



// Em vez de:$all = $db->query("SELECT * FROM logs"); // 100 000 linhas

// Use:$page = $_GET['page'] ?? 1;$limit = 20;$offset = ($page - 1) * $limit;$logs = $db->query("SELECT * FROM logs LIMIT $limit OFFSET $offset");


3. Configuração do servidor e OPcache



Às vezes, o problema não está no código, mas na configuração do PHP. A otimização mais poderosa é

Blogs

Book Recommendations