Big File Challenge
Este desafio foi proposto pelo Zanfranceschi
Você pode ver a proposta do desafio aqui ou então pelo Twitter
Para a implementação da solução utilizei os seguintes conceitos:
- Generators, que aprendi no video do Vinicius Dias - Dias de Dev, a solução que está neste repositório é a do vídeo do Vinicius :)
- Fiber, que aprendi no video do Leonardo Tumadjian - DifferDev e resolvi aplicar este desafio usando Fibers!
Explicação
O grande ponto do desafio é limitar sua infra, onde não é possível sua aplicação carregar em memória um arquivo enorme, dessa forma resolvi utilizar Generators que trabalha com Corrotinas e Fibers que permite trabalhar também com Corrotinas no PHP 8.1 >
A ideia de corrotinas é permitir que um processo seja parado, retorne para a função principal e em seguida volte para o mesmo ponto para continuar executando o processo. A ideia de corrotinas permite trabalhar de forma assíncrona!
Como executar o projeto:
1 - Clone este repositório:
git clone [email protected]:NicolasPereira/process-big-file-php.git
2 - Crie o arquivo gigante
php gerador-de-arquivo.php
3 - Para rodar usando generators execute
cd src/Generators
php generators.php
4 - Para rodar usando Fibers execute
cd src/Fibers
php fibers.php
Para rodar utilizando Fibers é necessário utilizar o PHP 8.1
Pontos a melhorar
Preciso dockerizar o projeto para o docker limitar a memória, para o teste alterei a memória do php no php.ini