Existe um ponto para minimizar o PHP?


101

Eu sei que você pode minimizar o PHP, mas estou me perguntando se há algum ponto. PHP é uma linguagem interpretada, portanto, será executada um pouco mais devagar do que uma linguagem compilada. Minha pergunta é: os clientes veriam uma melhora visível na velocidade de carregamento das páginas e tal se eu reduzisse meu PHP?

Além disso, existe uma maneira de compilar o PHP ou algo semelhante?


Um ponto óbvio é a ofuscação, para tornar seu código menos portátil, o que pode ser um objetivo válido.
John

Respostas:


161

O PHP é compilado em bytecode, que é então interpretado em cima de algo semelhante a uma VM. Muitas outras linguagens de script seguem o mesmo processo geral, incluindo Perl e Ruby. Não é realmente uma linguagem tradicional interpretada como, digamos, BASIC.

Não haveria aumento de velocidade efetivo se você tentasse "reduzir" a fonte. Você obteria um grande aumento usando um cache de bytecode como o APC .

O Facebook introduziu um compilador chamado HipHop que transforma a fonte PHP em código C ++. Rasmus Lerdorf, um dos grandes caras do PHP fez uma apresentação para Digg no início deste ano que cobre as melhorias de desempenho dadas pelo HipHop. Resumindo, não é muito mais rápido do que otimizar o código e usar um cache de bytecode. O HipHop é um exagero para a maioria dos usuários.

O Facebook também revelou recentemente o HHVM , uma nova máquina virtual baseada em seu trabalho de fazer o HipHop. Ainda é bastante novo e não está claro se irá fornecer um grande impulso de desempenho para o público em geral.

Apenas para ter certeza de que está declarado expressamente, leia a apresentação na íntegra. Ele aponta várias maneiras de benchmark e código de perfil e identificar gargalos usando ferramentas como xdebug e xhprof , também do Facebook.


2
Observe que toda a coisa de bytecode / vm não compra nada sem um cache de bytecode externo (!). Eu não entendo porque o PHP continua jogando o bytecode fora por padrão ...

Imagino que seja um problema de hospedagem compartilhada. APC é incluído no PHP por padrão a partir do antigo tronco baseado em 6.0. Não tenho certeza se veremos isso por padrão em 5.4 ou o que quer que o novo tronco acabe sendo chamado ...
Charles

Muito obrigado pela informação. Infelizmente não tenho controle profundo do meu servidor (ele está alugado). É provável que os hosts da web usem o APC?
Bojangles

3
A maioria dos provedores de hospedagem compartilhada não usa APC. Você deve examinar um Servidor Privado Virtual para que possa controlar a configuração. VPSes são frequentemente mais caros do que a hospedagem compartilhada normal, mas muito mais baratos do que um servidor dedicado real. Provedores de VPS populares incluem Slicehost e Linode. Não se esqueça de que você deve fazer o benchmarking e criar o perfil do seu código primeiro !
Charles

15

Esqueça a ideia de minimizar o PHP em favor de usar um cache de opcode, como PHP Accelerator, ou APC.

Ou algo como memcached


18
Eu disse "outra coisa".
Stephen

3
não está claro que você quer dizer algo diferente de um cache de opcode.
Treffynnon

5
memcached é uma maneira perfeitamente cromulenta de melhorar o desempenho ... depois de realizar benchmarking e profiling e estabelecer que o cache em si será o melhor ganho de desempenho possível.
Charles

1
se estiver usando PHP 5.5, você não precisa instalar nenhum cache de opcode porque agora ele vem com ele por padrão.
firewall

1
Na verdade, pesquisei cromulent :(. Concordo com os outros, usar memcached neste contexto é enganoso. O armazenamento em cache de dados como parte do processo de compilação não é o mesmo que o código operacional resultante.
Mike Purcell

3

Com algumas reescritas (nomes de variáveis ​​mais curtos), você pode economizar alguns bytes de memória, mas isso também raramente é significativo.

No entanto, eu projeto alguns de meus aplicativos de uma forma que permite concatenar scripts de inclusão. Com php -wele pode ser compactado de forma significativa, adicionando um pequeno ganho de velocidade para inicialização do script. Em um servidor habilitado para opcode, no entanto, isso salva apenas algumas verificações de mtime de arquivo.


3

Esta é menos uma resposta do que um anúncio. Estou trabalhando em uma extensão PHP que traduz opcodes Zend para rodar em uma VM com tipagem estática. Ele não acelera o código PHP arbitrário. Ele permite que você escreva um código que execute muito mais rápido do que o PHP normal permite. A chave aqui é a digitação estática. Em uma CPU moderna, uma linguagem dinâmica corrói a penalidade de erro de predição do branch à esquerda e à direita. O fato de que os arrays PHP são tabelas de hash também impõe alto custo: muitas previsões erradas de ramificações, uso ineficiente de cache, pré-busca de memória insuficiente e nenhuma otimização SIMD. Erros de previsão de branch e falhas de cache em particular são o calcanhar de Aquiles para os processadores atuais. Minha pequena VM contorna esse problema usando tipos estáticos e array C em vez de tabela de hash. O resultado acaba sendo cerca de dez vezes mais rápido. Isso está usando interpretação de bytecode. A extensão pode opcionalmente compilar uma função por meio do gcc. Nesse caso, você obtém de duas a cinco vezes mais velocidade.

Aqui está o link para todos os interessados:

https://github.com/chung-leong/qb/wiki

Novamente, a extensão não é um acelerador PHP geral. Você tem que escrever um código específico para ele.


2

Sim, há um ponto (não técnico).

Seu hoster pode espionar seu código em seu servidor. Se você minimiza e torna feio, é mais difícil para os espiões roubarem suas idéias.

Uma razão para diminuir e tornar feio o php pode ser a proteção contra espionagem. Acho que o código feio deve ser um passo em uma implantação automática.


1

Existem compiladores PHP ... veja esta questão anterior para uma lista; mas (a menos que você seja do tamanho do Facebook ou esteja direcionando seu aplicativo para ser executado no lado do cliente) eles geralmente causam muito mais problemas do que valem

O cache de opcode simples proporcionará mais benefícios para o esforço envolvido. Ou crie o perfil de seu código para identificar os gargalos e, em seguida, otimize-o.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.