Gerenciamento de memória e dicas de desempenho
Libere memória cedo, evite cópias de arrays grandes e use geradores para grandes conjuntos de dados.
Gerenciamento de memória e dicas de desempenho é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.
Gerenciamento de memória do PHP
O PHP usa contagem de referências com um coletor de ciclos para a coleta de lixo. Cada solicitação começa com um heap novo — processos de longa duração (processos de trabalho, Horizon) podem acumular vazamentos de memória.
memory_limit
Defina um limite de memória adequado em php.ini. Ultrapassá-lo gera um erro fatal.
# php.ini:
memory_limit = 256M
// Check at runtime:
echo memory_get_usage(true) / 1024 / 1024 . " MB";
echo memory_get_peak_usage(true) / 1024 / 1024 . " MB peak";Liberando variáveis grandes
Libere a memória explicitamente quando matrizes ou objetos grandes não forem mais necessários dentro de uma função longa.
<?php
$data = loadLargeDataset();
processData($data);
unset($data); // free immediately, do not wait for end of scope
gc_collect_cycles(); // force garbage collection if circular referencesGeradores para grandes conjuntos de dados
Use geradores para processar arquivos grandes ou resultados de consultas uma linha por vez, sem carregar tudo na memória.
<?php
function readCsvLines(string $file): Generator {
$fh = fopen($file, "r");
while (($line = fgetcsv($fh)) !== false) {
yield $line;
}
fclose($fh);
}
foreach (readCsvLines("large.csv") as $row) {
importRow($row);
}Evitando cópias de matrizes grandes
O PHP usa cópia na escrita para matrizes. Atribuir uma matriz a uma variável não a copia até que uma delas seja modificada. Passe matrizes grandes por referência quando for necessário modificá-las.
<?php
function processArray(array &$data): void {
// & avoids a copy when the parameter is modified
}Concatenação de strings em laços
Construir uma string concatenando-a em um laço é ineficiente para strings muito grandes. Use uma matriz e implode().
<?php
// Slow for large N:
$str = "";
foreach ($items as $item) $str .= $item->format()."\n";
// Faster:
$parts = [];
foreach ($items as $item) $parts[] = $item->format();
$str = implode("\n", $parts);Armazenamento em cache da criação de objetos
Instanciar objetos, especialmente com lógica no construtor, em laços muito frequentes é dispendioso. Armazene instâncias em cache ou use objetos leves compartilhados sempre que possível.
Evite chamadas repetidas de funções
Mova chamadas de funções cujo resultado é constante para fora dos laços quando o resultado não mudar a cada iteração.
<?php
// Slow:
for ($i = 0; $i < count($items); $i++) { ... }
// Fast (count() called once):
$n = count($items);
for ($i = 0; $i < $n; $i++) { ... }Ajuste dos processos do PHP-FPM
Configure a quantidade de processos do PHP-FPM com base na memória disponível e na simultaneidade esperada. Uma regra aproximada é: processos = RAM / (uso médio de memória por processo).
OPcache e pré-carregamento
Ative o OPcache, abordado na lição anterior, e pré-carregue as classes do framework usadas com frequência. Isso elimina o custo de analisar e compilar o código a cada requisição.
Faça a análise primeiro
Sempre faça a análise de desempenho antes de otimizar. Micro-otimizações aplicadas a código que não é um gargalo desperdiçam tempo e reduzem a legibilidade. Use Xdebug ou Blackfire para encontrar o caminho realmente crítico.
Resumo
Use geradores para grandes conjuntos de dados. Libere as variáveis quando terminar de usá-las. Evite copiar matrizes grandes. Mova chamadas constantes para fora dos laços. Faça a análise com Xdebug para encontrar os gargalos reais antes de otimizar.
Verificação rápida
Qual é o principal benefício dos geradores do PHP para grandes conjuntos de dados?
Perguntas Frequentes
A aula “Gerenciamento de memória e dicas de desempenho” é grátis?
Sim — o texto completo de “Gerenciamento de memória e dicas de desempenho” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.
O que vou aprender em “Gerenciamento de memória e dicas de desempenho”?
Libere memória cedo, evite cópias de arrays grandes e use geradores para grandes conjuntos de dados. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar PHP Academy?
Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Gerenciamento de memória e dicas de desempenho”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de PHP Academy?
Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Análise de desempenho do PHP com Xdebug
- OPcache: cache de bytecode
- Otimização de consultas ao banco de dados
- Gerenciamento de memória e dicas de desempenho