Desempenho com grandes conjuntos de dados
O Laravel Feeds grava os registros gradualmente. O uso de memória só permanece limitado quando todas as etapas anteriores continuam lazy.
Mantenha a consulta lazy
Retorne um Builder do Eloquent diretamente:
public function builder(): Builder
{
return Product::query()
->select(['id', 'title', 'updated_at'])
->where('is_exportable', true);
}
Não materialize o resultado completo antes da geração. Selecione apenas as colunas necessárias e carregue somente os relacionamentos usados por item() para evitar consultas N+1.
Ajuste o tamanho do lote
O padrão é 1000 registros. Valores menores reduzem o pico de memória dos modelos e aumentam as consultas. Valores maiores reduzem o custo das consultas e aumentam a memória. Meça com linhas próximas às de produção.
public function chunkSize(): int
{
return 500;
}
Divida os arquivos de saída
Use perFile() quando o consumidor aceitar vários arquivos ou quando uma saída única for difícil de publicar e repetir.
public function perFile(): int
{
return 50000;
}
Mantenha maxFiles() no valor padrão 0 quando todos os registros correspondentes precisarem ser exportados. Quando perFile() e maxFiles() forem maiores que zero, o Laravel Feeds exportará no máximo o produto desses valores e concluirá a geração com sucesso sem informar que os registros seguintes foram omitidos. Defina maxFiles() somente quando esse limite de registros for intencional.
Envie feeds longos para a fila
O modo de fila tira a geração do processo do console, mas não reduz a memória usada pelo feed. Use conexão assíncrona, workers com limites adequados e um TTL de unicidade maior que o tempo esperado de geração.
Meça todo o caminho
Meça separadamente banco de dados, hidratação dos modelos, transformação, serialização e publicação. Um disco remoto pode ser o maior custo mesmo quando a geração é rápida.