Just In Time compilation no PHP 8

JIT é um dos recursos mais aguardados na nova versão da linguagem, entenda como funciona.

Gabriel Albuquerque (Albuca)
3 min readNov 24, 2020

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.

Exemplo de uma função pré-compilada

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:

Aos 0:30 você pode ver a performance do PHP 7 e aos 1:04 você vê o PHP usando 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!

--

--

No responses yet