9 pontos por xguru 2024-05-27 | 2 comentários | Compartilhar no WhatsApp
  • O PHP atualmente representa cerca de 75% dos sites na internet
  • O PHP não é exatamente o "garoto sexy" das linguagens de programação, mas vem desempenhando um papel importante desde o nascimento da internet
  • Agora é possível executar PHP completamente no Wasmer e no Wasmer Edge (beta aberto)

A importância de executar PHP em WebAssembly

  • Graças às características do WebAssembly, é possível limitar com segurança os recursos que um programa pode acessar
  • É possível executar PHP com segurança sem o overhead de virtualização de sistema operacional ou hardware
  • A equipe do Wasmer investiu incontáveis horas para fazer o PHP rodar de forma perfeita e o mais rápido possível em WebAssembly
  • Ao ativar o cache de opcode dentro do WebAssembly, foi possível obter até 3x mais velocidade

Oferecendo escalabilidade no estilo serverless para apps em PHP

  • Oferecer escalabilidade no estilo serverless para todos os apps em PHP pode destravar um valor enorme
  • É possível executar apps em PHP na Edge e pagar apenas uma fração do preço cobrado pelos provedores de nuvem
  • É possível executar qualquer aplicação PHP com Wasmer sem se preocupar que o app escape do sandbox e faça algo prejudicial que não deveria

Os frameworks PHP mais populares podem rodar no Wasmer e no Wasmer Edge

  • WordPress
  • Symfony
  • Laravel
  • Todos os templates PHP: https://wasmer.io/templates?language=php
  • Observação: o suporte do Wasmer Edge para volumes de sistema de arquivos personalizados ainda está em andamento. Apps implantados que usam SQLite (como WordPress ou Symfony) atualmente salvam alterações no banco de dados apenas em memória e ainda não de forma persistente

Tirando o máximo proveito de WebAssembly e PHP

  • Ao ativar o cache de opcode, é possível executar o WordPress 3x mais rápido sem nenhuma modificação (de 600ms para 200ms)

Experimente você mesmo

  • Se normalmente você executa php -S localhost:8000 ., agora pode rodar tudo de forma totalmente isolada em sandbox com Wasmer:
    wasmer run php/php --mapdir:/app:. -- /app -S localhost:8000  
    
  • Também é fácil executar o WordPress localmente. Depois de clonar o repositório do WordPress, execute wasmer run . --net na raiz (requer Wasmer 4.3.1)
  • É fornecido um PHP CLI totalmente funcional rodando no servidor em um ambiente completamente sandboxed
  • Você não precisa mais se preocupar com o app acessando coisas como /etc/passwd

Feito técnico impressionante

  • Fazer o PHP funcionar perfeitamente como WebAssembly no Wasmer não foi tarefa fácil
  • A equipe acompanhou o processo e resolveu muitos problemas:
    • Encontrou um bug obscuro em que a stack era sobrescrita e não era restaurada corretamente na implementação de longjmp/setjmp necessária para usar instruções try/catch dentro do PHP
    • Encontrou e corrigiu um bug que deixava chamadas HTTP de saída 10x mais lentas
    • Ativou o PHP opcache por padrão para obter até 3x mais desempenho em PHP
    • Fez várias pequenas correções na camada de virtualização do sistema de arquivos e em rede (IPv6)
  • Se você já seguiu um post anterior do blog sobre executar WordPress com Wasmer, talvez saiba que era necessário fazer inúmeras modificações no código (também chamadas de hacks) para mudar o comportamento do WordPress e evitar acionar edge cases bloqueantes
  • Na versão mais recente do Wasmer, WordPress, Laravel e Symfony rodam no Wasmer sem nenhuma modificação de código

Velocidade

  • Não bastava apenas executar PHP em velocidade padrão; a meta era fazê-lo rodar o mais rápido possível em WebAssembly
  • O PHP tem um módulo chamado Zend Opcache que acelera bastante a execução
  • O módulo de cache de opcode otimiza e armazena em cache o bytecode para o qual o código-fonte PHP é convertido, economizando tempo na análise da AST de arquivos já processados
  • Como o cache de opcode pode acelerar em até 3x o número de requisições que um app consegue processar, ativá-lo no WebAssembly parecia óbvio
  • Porém, o cache de opcode (e o carregamento de módulos Zend) estava desativado por padrão (porque exige coisas como dlopen e dlsym, indisponíveis em Wasm)
  • Então começou uma missão incomum: ativar o cache de opcode no PHP
    • Depois de muita pesquisa, foi encontrada uma nova forma de fazer linkagem estática e, embora várias coisas tivessem que ser corrigidas no processo, no fim deu certo
  • Tempo do WordPress em Wasm sem Opcache: ~620ms
  • Tempo do WordPress em Wasm com Opcache ativado: ~205ms
  • Só de ativar o Opcache já houve um ganho de desempenho de 3x!
  • Ficou claro que ainda há muitas melhorias possíveis para aproximar o PHP da velocidade nativa (aguarde!)

Mais oportunidades se abrem

  • Isso abre mais possibilidades para projetos que hoje dependem de Emscripten para executar PHP no navegador, como o WordPress Playground
    • Esses projetos podem passar a ser empacotados de forma que rodem tanto no navegador quanto na Edge
  • Está sendo preparada uma abordagem totalmente revolucionária para cold start (Cloudflare & Fly.io, estamos de olho em vocês!)
  • Tempos empolgantes estão chegando para o mercado de Edge

2 comentários

 
tsboard 2024-05-28

Pessoalmente, acho meio impressionante e curioso que o PHP ainda seja usado tão ativamente. Hehe. Dizem que ele mudou bastante depois daquela época em que tinha má fama, então até fico pensando se não vale a pena voltar a usar PHP mais uma vez.

 
xguru 2024-05-29

Tanto no Hacker News quanto no GeekNews, muita gente parece não gostar de PHP rsrs
Mas, a menos que a tecnologia chamada web seja totalmente substituída por outra, acho que ela vai continuar sendo usada.
Acho que não devemos focar na "linguagem", e sim enxergá-la como uma das tecnologias que combinam com a "web".