39 Dicas de Performance para PHP
-
Se um método pode ser estático, declare ele estático. O fator de otimização é 4x+
-
echo é mais rápido que print. Veja
-
Prefira usar echo com múltiplo parâmetros ao invés de concatenar string
-
echo “parâmetro um”, $var , “outro parâmetro”
-
-
Set o valor máximo do seus loops FOR antes e não no for
#onde:
-
for($i=0;$i<count($array);$i++)
-
#use:
-
$max_for = count($array);
-
for($i=0;$i<$max_for;$i++)
-
-
Sempre de unset em variáveis que não serão mais usadas, principalmente grandes arrays
-
Tente não usar métodos mágicos, como: __get, __set, __autoload
-
require_once() tem custo elevado, prefira include[_once], como alertado pelo Pablo, o include_once é mais custoso que o include
-
Use caminhos completos em includes e requires, o PHP gastara menos tempo resolvendo os caminhos
-
Se você deseja descobrir quando o script começou a ser executado, $_SERVER[’REQUEST_TIME’] é melhor que time()
-
Se você puder, use strncasecmp, strpbrk e stripos no lugar de funções regex
-
str_replace é mais rápida que preg_replace, mas strtr é ainda 4x mais rápida que str_replace
-
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
-
É melhor usar switch/case do que múltiplos if’s e else
-
Usar supressão de erros com @ na frente da função é muito lento
-
Ative o mod_deflate do apache( modulo de compressão de resposta)
-
Feche as conexões ao banco de dados quando você não for mais usá-lo
-
$row[’id’] é 7x mais rápido que $row[id]
-
Mensagens de erros tem custo elevado, desligue-as em produção
-
Não use funções dentro de loops, como:
-
for ($x=0; $x < count($array); $x)
A função count() é chamada em cada iteração
-
-
Incrementando uma variável local é mais rápido
-
Incrementando uma variável global é 2x mais lento que em uma variável local
-
Incrementando uma propriedade ( $this->prop++) é 3x mais lento que em uma variável local.
-
Incrementando uma variável local não definida é de 9x a 10x mais lento do que uma variável local pré-inicializada
-
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
-
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
-
Métodos em classes derivadas rodam mais rápido do que aqueles definidos na classe base
-
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
-
Prefira usar HTML puro se for possível, scripts PHP são servidos de 2x a 10x mais lentos que equivalentes
-
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
-
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”; }-
# versus
-
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
-
-
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
-
Nem tudo precisa ser OOP, gera muita sobrecarga, cada chamada de método e objeto consome um monte de memória
-
Não implemente cada estrutura de dados como uma classe, arrays são úteis também
-
Não divida muito os métodos, pense bem cada código que será reusado
-
Você sempre poderá dividir o código no futuro, caso necessário
-
Faça uso das incontáveis funções pré-definidas
-
Se você tem muito tempo consumido por funções em seu código, considere escreva-las como extensões C
-
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
-
Excelente artigo sobre otimização PHP de John Lim (inglês)