Este artigo apresenta soluções práticas para otimização, buffer e compactação de PHP.
Como uma linguagem de programação Web popular, a maior vantagem do PHP é a velocidade. O PHP4 fez isso muito bem e dificilmente você encontrará uma linguagem de script mais rápida do que ela. Mas se a carga do seu aplicativo for pesada, sua largura de banda for relativamente pequena ou houver outros gargalos que afetam o desempenho do servidor, você também pode tentar algumas das prescrições que prescrevi para ver se funcionam.
1. Otimização de código
Quando se trata de otimização de código, você pode pensar em um código limpo e limpo, mas esse não é o significado deste artigo, pois se você deseja buscar velocidade, deve fazer os ajustes correspondentes no código-fonte PHP. De modo geral, comentários redundantes são removidos para tornar o código ilegível. Mas para um programador com boas qualidades, isso é simplesmente incrível. Felizmente, a Zend Technologies lançou o Zend Optimization Engine para ajudá-lo a fazer isso. Agora é gratuito, mas você deve seguir a licença do Zend Optimizer. Este produto pode otimizar o código intermediário gerado pelo mecanismo.
A instalação deste mecanismo é relativamente simples. Após baixar a versão correspondente à plataforma, descompacte o arquivo compactado, adicione as duas linhas a seguir ao arquivo php.ini, reinicie o servidor web e pronto.
zend_optimizer.optimization_level=15
zend_extension="/caminho/para/ZendOptimizer.so"
zend_loader.enable=Desligado
Se for uma plataforma Win32, deveria ser:
zend_optimizer.optimization_level=15
zend_extension_ts="C:caminho do endOptimizer.dll"
zend_loader.enable=Desligado
! Isso não é um erro? Por que três linhas? Na verdade, a terceira linha é opcional. Já que parece que desligar o zend_loader pode melhorar um pouco a velocidade, vale a pena colocar esta terceira linha no php.ini. Deve-se observar que o pré-requisito para desligá-lo é que você não esteja usando o programa de criptografia Zend.
2. Buffering
Se quisermos melhorar ainda mais a velocidade, precisamos considerar o uso da tecnologia de buffer. Existem algumas soluções alternativas, incluindo Zend Cache (versão beta), APC e Afterburner Cache, bem como jpCache.
Os itens acima são todos módulos de buffer. Eles armazenam o código intermediário gerado pela primeira solicitação do arquivo .php na memória do servidor Web e, em seguida, retornam a versão "compilada" para solicitações subsequentes. Como isso reduz leituras e gravações em disco e todo o trabalho na memória, esse processo pode melhorar significativamente o desempenho do aplicativo.
Existem muitos desses produtos prontamente disponíveis, então quem você deve escolher?
Zend Cache é um bom produto comercial Depois de carregar essas grandes páginas PHP pela primeira vez, você obviamente sentirá o aumento da velocidade e o servidor reservará mais recursos. Infelizmente, este produto custa dinheiro, mas em alguns casos, você não quer economizar dinheiro.
Afterburner Cache é um produto da Bware Technologies e está atualmente em versão Beta. Parece ser igual ao Zend Cashe, mas não consegue obter resultados tão bons quanto o Zend Cache, nem funciona com o mecanismo de otimização Zend, mas é gratuito. , então eu Este módulo é usado.
APC (Alternative PHP Cache) é outro módulo gratuito lançado pelo Community Connect que parece estar pronto para ambientes de produção.
3. Compressão de conteúdo da Web
Para redes cada vez mais lotadas, economizar largura de banda é tão valioso quanto economizar água. De acordo com os padrões IETF, a maioria dos navegadores deve suportar conteúdo compactado usando gzip. Isso significa que você pode enviar conteúdo compactado com gzip para o navegador, e o navegador descompactará os dados de forma transparente.
mod_gzip é um módulo Apache gratuito lançado pela Remote Communications, que pode compactar conteúdo estático da Web e enviá-lo ao navegador. Para a maioria das páginas da web estáticas, este módulo é adequado. Embora
pessoas da empresa Remotecommunications tenham dito que este módulo suporta todo o conteúdo dinâmico gerado por mod_php, mod_perl, mod e assim por diante, ele ainda não parece funcionar, a julgar pela lista de discussão mod_gzip, não se espera que este problema seja resolvido. até 1.3.14.6f.
Se quisermos compactar conteúdo dinâmico, podemos usar class.gzip_encode.php, uma classe PHP usada no início e no final do script. Para todo o site, são chamadas as funções auto_prepend e auto_append do php.ini. Para mais detalhes, você pode ler o programa desta aula. Este programa está bem comentado e o autor conta quase tudo. Mas antes de usá-lo, seu PHP deve ser compilado para suportar zlib.
Para o PHP 4.0.4, uma nova solução é usar ob_gzhandler, que pode obter o mesmo efeito da classe acima. Basta adicionar a seguinte frase ao php.ini:
output_handler
= ob_gzhandler;
Se houver algum motivo especial pelo qual você não deseja que todo o conteúdo seja compactado e gerado, você pode adicionar a seguinte linha ao arquivo .htaccess para compactar os arquivos no diretório correspondente.
php_value output_handler ob_gzhandler
também pode ser adicionado diretamente no código PHP:
ob_start("ob_gzhandler");
Esta tecnologia de compactação é muito eficaz, mas para usuários do Netscape Communicator, ela parece incompleta porque não pode compactar arquivos gráficos Mu⑺Stop? a compactação de arquivos jpeg e gif IE não tem esse problema.
Conclusão:
O uso das técnicas discutidas neste artigo deve melhorar o desempenho do seu site, mas esteja ciente de que:
- PHP pode não ser a causa do gargalo, verifique outras causas (por exemplo, banco de dados)
- Você não pode maximizar o estado de desempenho do servidor. Portanto, antes de reclamar do PHP e de seu buffer, considere se é hora de atualizar seu servidor ou adotar a tecnologia de balanceamento de carga dinâmico (isso é muito dinheiro).
- Não subestime a compactação de conteúdo. Enquanto você observa melhorias de velocidade em seus aplicativos PHP em sua intranet de 100 Mb, não se esqueça de onde os usuários do modem estão reclamando sobre suas páginas HTML de 100 KB.