39 Dicas de Performance para PHP

  1. Se um método pode ser estático, declare ele estático. O fator de otimização é 4x+

  2. echo é mais rápido que print. Veja

  3. Prefira usar echo com múltiplo parâmetros ao invés de concatenar string

    1. echo “parâmetro um”, $var , “outro parâmetro”

  4. Set o valor máximo  do seus loops FOR antes e não no for

    #onde:

    1. for($i=0;$i<count($array);$i++)
    2. #use:
    3. $max_for = count($array);
    4. for($i=0;$i<$max_for;$i++)
  5. Sempre de unset em variáveis que não serão mais usadas, principalmente grandes arrays

  6. Tente não usar métodos mágicos, como:  __get, __set, __autoload

  7. require_once() tem custo elevado, prefira include[_once], como alertado pelo Pablo, o include_once é mais custoso que o include

  8. Use caminhos completos em includes e requires, o PHP gastara menos tempo resolvendo os caminhos

  9. Se você deseja descobrir quando o script começou a ser executado, $_SERVER[’REQUEST_TIME’]  é melhor que time()

  10. Se você puder, use strncasecmp, strpbrk e stripos no lugar de funções regex

  11. str_replace é mais rápida que preg_replace, mas strtr é ainda 4x mais rápida que str_replace

  12. Se uma função, como troca de string , aceitar tanto arrays quanto caracteres únicos e a sua lista de argumentos não for muito longa, considere escrever algumas vezes o mesmo código passando um caracter por vez ao invés de uma linha passando arrays nos argumentos de pesquisa e troca

  13. É melhor usar switch/case do que múltiplos if’s e else

  14. Usar supressão de erros com @ na frente da função é muito lento

  15. Ative o mod_deflate do apache( modulo de compressão de resposta)

  16. Feche as conexões ao banco de dados quando você não for mais usá-lo

  17. $row[’id’] é 7x mais rápido que  $row[id]

  18. Mensagens de erros tem custo elevado, desligue-as em produção

  19. Não use funções dentro de loops, como:

    1. for ($x=0; $x < count($array); $x)

    A função count() é chamada em cada iteração

  20. Incrementando uma variável local é mais rápido

  21. Incrementando uma variável global é 2x mais lento que em uma variável local

  22. Incrementando uma propriedade ( $this->prop++) é 3x mais lento que em uma variável local.

  23. Incrementando uma variável local não definida é de 9x a 10x mais lento do que uma variável local pré-inicializada

  24. Declarando uma variável global sem usá-lo em uma função também atrasa as coisas (com aproximadamente a mesma quantidade incrementando como uma variável local).O PHP provavelmente faz um checagem para ver se existe a nível global

  25. A invocação de métodos parece ser independente do número de métodos definidos em uma classe, em uma classe de teste onde se adicionou 10 métodos não teve mudança de performance

  26. Métodos em classes derivadas rodam mais rápido do que aqueles definidos na classe base

  27. Use ‘ ao invés de ” em strings quando não for preciso usar variáveis ou escapes, assim o PHP não necessita procurar e interpretar esses caracteres especiais

  28. Prefira usar HTML puro se for possível, scripts PHP são servidos de 2x a 10x mais lentos que equivalentes

  29. Em cada requisição seus scripts PHP são recompilados, use uma solução de cache, isso pode te dar um ganho de 25 a 100% . Veja

  30. Quando lidando com string e você precisar verificar se a string possui certo tamanho, você entendidamente desejara usar a função strlen()
    Essa função é bastante rápida, já que ela não faz nenhum calculo, apenas retorna o tamanho já conhecido da string disponível na estrutura zval(estrutura interna do C usada para guardar variáveis PHP). No entanto como strlen() é uma função ela ainda assim é lenta, porque o PHP precisa fazer varias operações  como lowercase e buscas na hashtable, e em seguida executar a dita função
    Algumas vezes você poderá aumentar a velocidade do seu código usando um truque com isset()
    Exemplo: Digamos que você tem:

     
    if (strlen($foo) < 5) { echo “Foo is too short”; }
    1. # versus
    2. if (!isset($foo{5})) { echo “Foo is too short”; }

    Usando isset() será mais rápido que strlen(), porque diferente de strlen(), isset() é um construtor de linguagem e não uma função, isso quer dizer que a sua execução não necessita busca na hashtable nem uso de lowercase. Virtualmente você não sobrecarga no código atual para determinar o tamanho da string

  31. Quando incrementando ou decrementando o valor de uma variável, $i++ normalmente é mais lenta que  ++$i. Isso é especifico para PHP, ou seja, não se aplica a outras linguagens, não sai por ai modificando seu código java ou C. Isso se da porque $i++ usa 4 opcodes enquanto ++$i precisa de somente 3

  32. Nem tudo precisa ser OOP, gera muita sobrecarga, cada chamada de método e objeto consome um monte de memória

  33. Não implemente cada estrutura de dados como uma classe, arrays são úteis também

  34. Não divida muito os métodos, pense bem cada código que será reusado

  35. Você sempre poderá dividir o código no futuro, caso necessário

  36. Faça uso das incontáveis funções pré-definidas

  37. Se você tem muito tempo consumido por funções em seu código, considere escreva-las como extensões C

  38. Faça Profile do seu código. Um profiler mostra quanto tempo cada parte do seu código consome. A extensão  Xdebug já contém um profiler

  39. Excelente artigo sobre otimização PHP de John Lim (inglês)