Just In Time compilation no PHP 8
JIT é um dos recursos mais aguardados na nova versão da linguagem, entenda como funciona.
Performance
Vamos começar com um pouco de história: nos últimos anos, a equipe de desenvolvimento do PHP tem se focado em melhorias de recursos que atuam por baixo dos panos na linguagem, eles têm trabalhado em diversos pontos e tudo isso visando um ganho de performance.
O lançamento do PHP 7 mostrou que esse trabalho não foi em vão, a versão 7 da linguagem se mostrou em alguns casos até 3 vezes mais rápida que suas versões anteriores!
Vale a pena ressaltar que uma das tentativas no desenvolvimento do PHP 7 foi a implementação do JIT, o que não foi viável na época, mas pense comigo, se não foi possível usar o JIT na versão 7 e ela se mostrou tão perfomática, imagina se eles conseguissem usar?
OPCache e OPcode
Antes de vermos o que o JIT faz, precisamos entender o OPcache do PHP, o OPcache é basicamente um armazenamento de código ‘pré-compilado’ de uma versão previamente executada, ou seja, quando rodamos um código PHP pela primeira vez, ele passa pelo processo de interpretação e no meio desse processo ele gera um OPcode que é o seu código pré-compilado e esse OPcode é salvo dentro do OPCache que falamos. Quando rodamos o mesmo código novamente, o interpretador vai ‘checar’ se o código já existe no OPcache e se sim, ele vai usar o já pré-compilado, dando um ganho de performance.
O OPcache está disponível desde o PHP 5.5 e foi optmizado em versões do PHP 7.
Mas e o JIT?
Bem, o JIT funciona como uma extensão do OPcache, ele vai permitir o armazenamento não de um código pré-compilado, mas sim de um código completamente compilado que vai ser diretamente executado pelo processador, ou seja, estamos pulando o processo de execução de OPcode pela Zend Engine e conversão para código de máquina, já estamos entregando o código compilado em tempo de execução!
Abaixo um vídeo comparando a velocidade de processamento do PHP 7 com o PHP usando o JIT:
Qual a verdadeira vantagem?
O JIT trabalha na parte de processamento, ao entregar um código pronto para ser lido pelo processador da máquina nós poupamos muitos recursos de processamento.
Vale saber, que na web, a maior parte do tempo estamos fazendo operações de I/O, como por exemplo: acesso a Banco de Dados, arquivos, serviços externos e outros. Isso quer dizer que na web não costumamos a usar muito processamento, e mesmo nos casos que sim, o PHP já tem se mostrado eficiente, isso que dizer que na web, só vamos sentir a performance em casos específicos como processamento assíncrono e coisas do tipo, se é assim, então qual a vantagem do JIT?
Com o ganho de processamento o JIT permite que o PHP execute operações bem mais pesadas, e com isso, abre um leque de possibilidades para que a linguagem seja também usada de forma eficiente fora da web e em contextos nunca antes usados como Machine Learning, Processamento de Imagens, IOT, e muitos outros.
O PHP já foi ‘testado’ em alguns desses contextos mas nunca foi usado de maneira séria, e com motivos, a linguagem sempre foi desenvolvida com o inuito de servir a web e esse sempre foi seu nicho, mas agora existe essa possibilidade, desde que agora ele tem performance de processamento e pode ir ‘além’ do que já foi até o momento.
Todo o hype em volta dessa feature ocorre por conta disso, essa novidade pode possivelmente trazer ‘novos ares’ para a linguagem, permitindo sua usabilidade em outras áreas, em outros contextos e em outros propósitos.
Conclusão
Muito obrigado se você leu até aqui, eu espero que você tenha aprendido com o artigo, são com assunto ‘chatos’ como esse que realmente aprendemos as coisas.
O PHP 8 vai ser lançado agora dia 26 de Novembro, são tempos interessantes para ficar de olho na linguagem.
Bons estudos!