Para quem está iniciando no Laravel muitas vezes acaba se perguntando qual componente utilizar para atividades em background, Commands ou Jobs?
E sabe de uma coisa? Também já tive essa mesma dúvida, por mais que na teoria sejam bem semelhantes, na prática nem tanto. Vou começar explicando um pouco dos 2 separadamente e para finalizar irei dar uma comparação mais concisa de ambos.
Commands:
- Uso principal: Commands são utilizados para executar tarefas no terminal (CLI). Eles são tipicamente comandos personalizados que você define para serem executados manualmente via linha de comando.
- Exemplo de uso: Tarefas administrativas, como limpeza de banco de dados, envio de e-mails em massa, ou qualquer outro tipo de rotina que você queira executar manualmente.
- Criação: Criados com o comando
php artisan make:command
. Eles ficam na pasta app/Console/Commands. - Execução: São chamados diretamente no terminal com o comando
php artisan <nome_do_comando>
.
Jobs:
- Uso principal: Jobs são tarefas específicas que você deseja processar em segundo plano (background). Eles são frequentemente usados em conjunto com queues (filas).
- Exemplo de uso: Processamento de dados demorados, como redimensionamento de imagens, envio de emails, ou notificações que não precisam ser imediatas.
- Criação: Criados com o comando
php artisan make:job
. Eles ficam na pasta app/Jobs. - Execução: São chamados a partir do código da aplicação e podem ser empilhados em uma queue para serem processados de maneira assíncrona.
Comparação final:
Essencialmente, Commands são usados para tarefas administrativas ou interativas, enquanto Jobs são ideais para processamento em segundo plano e trabalhos assíncronos.
Espero que gostem desse pequeno resumo mas de suma importância a respeito destes dois componentes super importantes no ecossistema não só do framework Laravel, mas também da web em geral. Nesse pequeno post, me concentrei apenas em mostrar em quais situações reais serão usados ambos e não a funcionalidade dentro do serviço em si, o que pode ser assunto separado para cada um deles nos próximos posts (pois há muito conteúdo 😅).