Otimização de desempenho de aplicações PHP: guia 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

\n

Uma aplicação PHP lenta não são apenas segundos perdidos de espera, mas também usuários frustrados, queda nas posições dos resultados de busca e aumento da carga no servidor. Felizmente, mesmo um desenvolvedor iniciante pode melhorar significativamente o desempenho do seu código sem se aprofundar em configurações complexas do sistema. Neste artigo, vamos abordar métodos básicos, mas eficazes, de otimização de aplicações PHP que ajudarão seu site ou serviço web a funcionar de forma mais rápida e estável.

\n

Vamos examinar quatro áreas principais: cache de dados, otimização do trabalho com bancos de dados, gerenciamento eficiente de memória e uso de recursos modernos do PHP. Cada seção será acompanhada de exemplos práticos de código.

\n\n

Cache: sua principal ferramenta de aceleração

\n

Cache é o armazenamento dos resultados de operações custosas para reutilização. Em vez de gerar uma página ou executar uma consulta SQL complexa toda vez, você entrega uma cópia previamente salva.

\n\n

Cache em memória com Memcached ou Redis

\n

A maneira mais rápida de fazer cache é usar armazenamentos in-memory, como Memcached ou Redis. Eles armazenam dados na memória RAM, permitindo recuperá-los em microssegundos.

\n

Exemplo de cache simples do resultado de uma consulta ao banco de dados usando Memcached:

\n
<?php\n$memcached = new Memcached();\n$memcached->addServer('localhost', 11211);\n\n$cacheKey = 'user_profile_123';\n$userData = $memcached->get($cacheKey);\n\nif ($userData === false) {\n    // Dados não estão em cache — executa a consulta pesada\n    $userData = getUserFromDatabase(123);\n    // Salva em cache por 10 minutos (600 segundos)\n    $memcached->set($cacheKey, $userData, 600);\n}\n\necho $userData['name'];\n?>
\n\n

Cache de páginas HTML inteiras

\n

Para páginas estáticas ou que mudam raramente, você pode armazenar em cache a saída HTML pronta. Isso reduz a carga no interpretador PHP e no servidor web.

\n
<?php\n$cacheFile = 'cache/index.html';\n$cacheTime = 3600; // 1 hora\n\nif (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTime) {\n    // Entrega a página em cache\n    readfile($cacheFile);\n    exit;\n}\n\n// Inicia o buffer de saída\nob_start();\n\n// ... seu código PHP normal que gera a página ...\n\n$html = ob_get_clean();\nfile_put_contents($cacheFile, $html);\necho $html;\n?>
\n\n

Otimização do trabalho com bancos de dados

\n

O banco de dados é o gargalo mais comum na maioria das aplicações PHP. Algumas mudanças simples podem proporcionar um enorme ganho de velocidade.

\n\n

Use índices

\n

Sem índices, o MySQL executa uma varredura completa da tabela (full table scan), o que é extremamente lento em grandes volumes de dados. Adicione índices nos campos que participam das cláusulas WHERE, JOIN e ORDER BY.

\n
-- Exemplo: tabela de pedidos\nCREATE INDEX idx_user_id ON orders(user_id);\nCREATE INDEX idx_created_at ON orders(created_at);
\n\n

Evite consultas N+1

\n

Este é um erro clássico: em um loop, você faz uma consulta ao banco de dados para cada elemento. Em vez disso, use uma única consulta com JOIN ou subconsulta.

\n

Exemplo ruim (N+1):

\n
<?php\n$users = $db->query("SELECT * FROM users");\nforeach ($users as $user) {\n    // Para cada usuário, é feita uma consulta separada\n    $orders = $db->query("SELECT * FROM orders WHERE user_id = " . $user['id']);\n}\n?>
\n\n

Exemplo bom (uma consulta):

\n
<?php\n$usersWithOrders = $db->query("\n    SELECT u.*, o.* \n    FROM users u \n    LEFT JOIN orders o ON u.id = o.user_id\n");\n?>
\n\n

Limite a seleção de dados

\n

Nunca solicite todas as linhas se você precisa apenas de 10. Use

Blogs

Book Recommendations