Otimização de desempenho de aplicações PHP: guia completo

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



O PHP continua sendo uma das linguagens mais populares para desenvolvimento web: WordPress, Laravel, Symfony e milhões de sites rodam nela. No entanto, com o aumento da carga, a performance de aplicações PHP pode se tornar um gargalo. O carregamento lento de páginas não só prejudica a experiência do usuário, mas também reduz as posições nos resultados de busca (o Google considera Core Web Vitals).



Neste artigo, vamos abordar métodos comprovados de otimização PHP que ajudarão a acelerar sua aplicação sem reescrever todo o código. Você aprenderá sobre caching, configuração do interpretador, otimização de banco de dados e profiling.



1. Caching: o primeiro passo para a velocidade



Caching é a forma mais eficaz de reduzir o tempo de resposta. Em vez de executar operações pesadas toda vez, salve o resultado e entregue-o a partir do cache.



1.1. OpCache (PHP 7/8)



PHP é uma linguagem interpretada: a cada requisição, ele compila o script em opcode (bytecode). O OpCache armazena o opcode compilado na memória RAM, eliminando a recompilação repetida. Isso proporciona um ganho de performance de até 30–50%.



Como ativar: Abra o php.ini e certifique-se de que os parâmetros estão configurados:



opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=10000opcache.revalidate_freq=2


Para produção, defina opcache.revalidate_freq=0 e limpe o cache manualmente no deploy.



1.2. Cache de dados (Redis / Memcached)



Se sua aplicação faz consultas caras ao BD ou APIs externas, use armazenamentos in-memory.



Exemplo com Redis:



<?php$redis = new Redis();$redis->connect('127.0.0.1', 6379);

$cacheKey = 'user_profile_' . $userId;$profile = $redis->get($cacheKey);

if (!$profile) { // Consulta cara ao BD $profile = getUserProfileFromDB($userId); $redis->setex($cacheKey, 3600, serialize($profile)); // TTL 1 hora}

$profile = unserialize($profile);


1.3. Cache de HTML (Full Page Cache)



Para páginas estáticas ou raramente atualizadas (blog, landing page), você pode armazenar em cache a saída HTML pronta. No Laravel, isso é feito via middleware; no Symfony, via HTTP cache.



2. Otimização de consultas SQL e banco de dados



Na maioria das vezes, o gargalo de uma aplicação PHP é o banco de dados. Consultas lentas consomem recursos do servidor.



2.1. Use índices



Certifique-se de que as colunas usadas em WHERE, JOIN e ORDER BY possuem índices. Você pode verificar isso com EXPLAIN SELECT ....



Consulta ruim (sem índice):



SELECT * FROM orders WHERE status = 'pending';


Consulta boa (com índice):



CREATE INDEX idx_orders_status ON orders (status);SELECT * FROM orders WHERE status = 'pending';


2.2. Evite consultas N+1



Este é um erro clássico de ORM: obter dados para cada registro dentro de um loop.



Problema (Laravel Eloquent):



$users = User::all();foreach ($users as $user) {    echo $user->profile->bio; // uma nova consulta a cada vez}


Solução (carregamento ansioso):



$users = User::with('profile')->get();foreach ($users as $user) {    echo $user->profile->bio; // uma única consulta}


2.3. Paginação em vez de LIMIT com grande deslocamento



Com LIMIT 10 OFFSET 100000, o MySQL ainda percorre 100010 linhas. Use cursor-based pagination (busca por índice):



SELECT * FROM posts WHERE id > $lastId ORDER BY id ASC LIMIT 10;


3. Otimização de código e arquitetura



Mesmo com BD e cache ideais, código ruim po

Blogs

Book Recommendations