Otimização de desempenho de aplicações PHP: dicas e exemplos

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 desempenho de aplicações PHP é um dos principais fatores de sucesso para qualquer projeto web. Um site lento não apenas afasta usuários, mas também impacta negativamente o ranking de SEO. Neste artigo, abordaremos os principais métodos para otimizar o código PHP e a infraestrutura do servidor que ajudarão a acelerar sua aplicação.

A otimização não é uma ação única, mas um processo contínuo. Vamos começar com as técnicas mais eficazes que proporcionam o maior ganho de desempenho.



1. Cache de Dados

O cache é uma das ferramentas mais poderosas para acelerar aplicações PHP. Em vez de gerar uma resposta do zero toda vez, você pode salvar o resultado e servi-lo a partir do cache.



1.1. Cache em Memória (Redis/Memcached)

Use sistemas de cache em memória como Redis ou Memcached. Eles são ideais para armazenar resultados de consultas complexas, sessões e dados frequentemente solicitados.

<?php// Example of using Redis for caching$redis = new Redis();$redis->connect('127.0.0.1', 6379);

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

if ($profile === false) { // Data not in cache — execute heavy query $profile = getUserProfileFromDatabase($userId); $redis->setex($cacheKey, 3600, serialize($profile)); // Cache for 1 hour}

$profile = unserialize($profile);?>


1.2. Cache de Saída HTML (Full Page Cache)

Para páginas estáticas ou páginas que raramente mudam, use o cache do HTML pronto. Isso pode ser implementado usando Varnish ou cache incorporado em frameworks populares (ex: Symfony HTTP Cache).



2. Otimização de Banco de Dados

O banco de dados frequentemente se torna um gargalo. Otimizar consultas e a estrutura do banco de dados pode proporcionar um grande ganho de velocidade.



2.1. Use Índices

Certifique-se de que todas as colunas envolvidas em condições WHERE, JOIN e ORDER BY tenham índices. Isso acelera a busca dezenas de vezes.



2.2. Otimização de Consultas com EXPLAIN

Antes de executar uma consulta complexa, use o comando EXPLAIN para entender como o MySQL a executa. Procure por "Using filesort" ou "Using temporary" — estes são sinais de uma consulta não otimizada.

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

// Good: single query with JOIN$users = $db->query(" SELECT u.*, p.title as post_title FROM users u LEFT JOIN posts p ON p.user_id = u.id");?>


2.3. Paginação em Vez de LIMIT com Grande Offset

Usar LIMIT com um grande OFFSET força o banco de dados a escanear muitas linhas. Use paginação baseada em cursor (WHERE id > last_id).

<?php// Bad: LIMIT 100000, 20$stmt = $db->query("SELECT * FROM articles ORDER BY id LIMIT 100000, 20");

// Good: cursor-based pagination$lastId = $_GET['last_id'] ?? 0;$stmt = $db->query("SELECT * FROM articles WHERE id > $lastId ORDER BY id LIMIT 20");?>


3. Usando OPcache e Autoloading de Classes

PHP é uma linguagem interpretada, e cada requisição exige a compilação do script. O OPcache resolve esse problema armazenando o código compilado na memória.



3.1. Configurando OPcache

Certifique-se de que o OPcache está habilitado e configurado corretamente. Aqui estão os parâmetros ideais para a maioria dos projetos:

; php.iniopcache.enable=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=10000opcache.revalidate_freq=2opcache.fast_shutdown=1


3.2. Autoloading de Classes Adequado

Use o Composer para autoloading de classes. Isso permite carregar apenas as classes que são

Blogs

Book Recommendations