Dicas para aumentar a performance do seu código PHP

Standard

Ontem falamos de integração continuada em PHP. Hoje vamos ver algumas dicas de como tornar seu código mais eficiente e rápido. Não adianta ter o melhor código do mundo se ele não for rápido. Na web, considere 2s como o tempo máximo, em condições extremas, para a carga de qualquer página. Antes que comecem as críticas, sei que a infraestrutura conta que a otimização do DB conta que o clima e a fase da Lua também contam, mas, aqui, vamos falar apenas do quê podemos fazer durante o desenvolvimento.

Phillip : male ballet dancer catches the sun
 photo credit: tibchris

xDebug trata-se de uma biblioteca para correção de erros e avaliação de performance para o PHP. Integra muito bem com o Aptana Studio, Eclipse e outras IDEs. Além de permitir coisas como brake e watch, possui uma função de profile que gera um relatório dos tempos gastos com as funções, loops, ifs e etc… dos seus scripts. Usando o KCacheGrind para o KDE e o WinCacheGrind para o Windows, você pode analisar estes relatórios de desempenho de forma gráfica. É possível também, criar um script com o Phing para analisar o relatório de desempenho e incluir este relatório na saída do processo de integração continuada. Além do xDebug, temos o Benchmark, DBG e Advanced PHP Debugger.

Use a versão estável mais nova do PHP. Todas as versões, sem exceção, incluem correções que melhoram o desempenho do código executado. Então migre seu código para a versão mais nova. Em muitos casos esta migração é indolor. Em alguns pode ser fatal. Caberá a você estudar os problemas e decidir como migrar.

Setters e getters: Eu sei, seu professor ensinou assim. Mas, isso não é desculpa para você continuar a fazer setters e getters que simplesmente armazenam o argumento do método. Então, de hoje em diante, nenhum código seu terá uma coisa assim:

[php]
class cliente {
public $nome = ”;

public function setNome($nome) {
$this->nome = $nome;
}

public function getNome() {
return $this->nome;
}
}[/php]

Variáveis Locais: O PHP possui um conjunto de variáveis que facilitam o trabalho com os argumentos passados por um script para outro, em formato de array, como o $_POST e $_GET, por exemplo. Então, agora que você já é um programador crescidinho, não vai carregar uma variável local só para o código ficar mais bonitinho, combinado?

Use include() e require() em lugar de include_once() e require_once(). Durante a execução, estas duas últimas requerem muito mais tempo de processamento, memória e recursos.

Desenvolva com error_reporting(E_ALL), cada warning emitido significa um incremento possível do desempenho do seu código. Resolva todos os warnings. Acredite, eles não estão ali porque os desenvolvedores do PHP são abusivos.

Não use aspas duplas: Alguns vão discordar, mas, a verdade é que cada string entre aspas duplas deverá ser analisada para verificar se contém variáveis que deverão ser substituídas ou não. Se o programador fizer isto em um loop é caso para eutanásia.

Use as funções do PHP: O PHP tem milhares de funções prontinhas, testadas, otimizadas e corrigidas ao longo dos anos por milhares de desenvolvedores. Eu sei que você é o melhor programador do mundo e pode fazer melhor mas, apenas em consideração ao trabalho deles, use as funções predefinidas.

Use echo em lugar de print: Durante a execução do echo, o PHP não espera nenhum retorno, enquanto no print ele aguarda um. Se seu sistema tem dez usuários por dia não faz diferença, se ele tem dez milhões faz. Então, mesmo que esteja em uma pequena empresa hoje, já faça certo. Amanhã você pode estar trabalhando no Yahoo!

Faça o profiling: Comecei e termino por aqui. Faça o Profile! Não é difícil encontrar queries SQL em loops (passa despercebido) e acabamos chamando o DB dez mil vezes seguidas para montar uma tabela que poderia ser montada com um único query; Ou encontrar variáveis sendo definidas a cada iteração; Ou ainda, strings sendo avaliadas centenas de milhares de vezes só para incluir o valor de uma variável.

Por fim lembre-se, levou mais de 2s para carregar toda a página, não está pronto, nem bom e muito menos razoável. Se o problema não for seu, for do analista do banco de dados, por exemplo, reclame, incomode, aborreça. O desempenho é responsabilidade de todos, mas, são os programadores que devem gritar primeiro.

10 thoughts on “Dicas para aumentar a performance do seu código PHP

  1. everaldo

    Ótimo artigo, só discordo da aspas dupla. Eu sempre evitei a aspas dupla por achar que ela seria um pouco mais lenta mas parece que em versões recentes do PHP isso não é totalmente verdade.

    Nesse site tem mais detalhes, procure por "quotes":

    http://www.phpbench.com/

    No mesmo site tem ainda outro benchmarks interessantes.

  2. everaldo

    Bem, olhando aqui na minha máquina, acabei tento resultados bem diferentes e realmente a dupla continua demorando mais. Não dá para acreditar em benchmark, tem que testar por si mesmo.

    Fiz um exemplo e colei ele aqui: http://pastebin.com/fmWMf093

    Executo 100000 cada um como pode ver no exemplo.

    Aqui os resultados foram:

    > php testquotes.php
    0.011822
    0.0120711
    0.0140715
    0.014224

    Ou seja, é mais lento e tem diferença. A pergunta é: É realmente significante?
    Bem, eu continuo usando aspas simples quando a dupla não é necessária e acho que vou até a passar a concatenar ao invés de usar a dupla.

  3. mariohsantos

    Hoje em dia fica dificil notar esses pequenos detalhes ao desenvolver um sistema, são ótimas dicas estas que podem fazer a diferença. Principalmente quando pensamos em larga escalabidade.

    Geralmente os programadores PHP debugam o código colocando echo $var;exit; ou var_dump($dados) ; ou print_r($dados); Eu por sinal ainda faço isso, mas irei avaliar o xDEBUG e começar a debugar utilizando os breakpoint, facilita muito poder avaliar o valor da váriavel em tempo de compilação.

    É uma boa dica essa referente as funções do php, é bom pesquisar referente ao que queremos fazer, pode existir pronto em algum lugar, e um ótimo lugar para procurar é o PHP.NET.

    Frank, o artigo comenta sobre os warning certo, mas e os notice? Também afetam o desempenho do programa?

    Boa noite e Abraços a todos.

    Mario Henrique, Faculdades SPEI.

  4. EdsonPfluck

    Olá Frank.
    Apesar de não programar em PHP é interessante perceber como alguns detalhes fazem ou podem fazer diferença no final de um processo, como é o caso do uso ou não de aspas duplas dentro do código além, é claro de inumeras outras variantes dentro de um mesmo código. Esperar a abertura de uma página pesada, seja qual for a razão, é extremamente desagradável, principalmente se considerarmos o uso de redes gigabits.
    Aquele abraço
    EdsonPfluck – SPEI

  5. Andre_Cussolin

    Acho extremamente válido esse post sobre performance, pois muitos programadores de diversas linguagens não se preocupam com o processamento de memória e diversos acessos ao banco. A ferramenta de Debug, é muito útil na área de SAP em qual eu trabalho, onde 70% do processamento do ABAP gira em torno de comandos SQL e uso do Banco de Dados. É importante todos saberem debugar um código olhando seu passo a passo, colocando break-points e watchpoints. Facilitam muito a vida do programador, que como o professor disse, são os que devem gritar primeiro. Abraço professor, até a próxima

    André Cussolin – 8BSI – SPEI – Noite

  6. allanmatias86

    Vamos avaliar a seguinte situação, se fosse para o código ser manuscrito ele teria um custo maior e exigiria um tempo maior certo? Da mesma forma seria para fazer a leitura. Então creio que essas questões podem sim influenciar na performance de uma aplicação, desde tabulação até mesmo o tamanha das variáveis.

  7. achorbach

    Vale a pena a pesquisa quando se trata em programação, pois existem muitos macetes capazes de agilizar todo um processo de desenvolvimento de um aplicativo.
    Existe muito material disponível na internet para essa finalidade.
    Entre elas destaco uma que encontrei e gostaria de partilhar com todos. Esta neste endereço:
    Tem como título "12 dicas para deixar seu código php mais rápido" http://www.tecnowarez.com/2010/09/12-dicas-para-d

    Admir Correia Horbach

Comments are closed.