Otimização de códigos PHP (Parte 1)


1 Estrelas2 Estrelas3 Estrelas4 Estrelas5 Estrelas (12 votos, média: 4.25 de 5)
Loading ... Loading ...

Bom pessoal, esta é a primeira parte de alguns posts relacionados a otimização de códigos PHP.

Como PHP é uma linguagem muito facil de se aprender, o número de pessoas que programam é muito grande… Ai, quando a pessoa já aprendeu a cadastrar dados no banco de dados ela ja sai fazendo freelas. Só que a qualidade do código é muito baixa, por este motivo, o PHP tem sido de certa forma ”difamado” e mau visto. Para muitas pessoas, PHP é sinônimo de gambiarra!

Com estes posts, pretendo mostrar que tem como fazer códigos com qualidade e otimizados.




(1) – echo é mais rápido do que o print.

Claro que a diferença é mínima. Pois o print() imprime um valor na tela e retorna um valor inteiro(1 ou 0) enquanto o echo apenas imprime o valor na tela.
Por exemplo, com print você pode fazer assim:

  1. <?
  2. $a = print ‘Um texto qualquer’;
  3. ?>


(2) – Defina o tamanho dos seus loops antes, evite usar funções como count() e sizeof() na declaração do loop. Veja um exemplo abaixo:

Como NÃO FAZER:

  1. <?
  2. $frutas = array(‘maça’, ‘banana’, ‘morango’, ‘mamão’);
  3. echo ‘Gosto de:’;
  4. for($i=0; $i <= count($frutas); $i++){
  5.     echo $frutas[$i].‘, ‘;
  6. }
  7. ?>

Perceba que neste caso, a função COUNT() será chamada TODAS as vezes que o loop ocorrer (pois como você já sabe, a linha 4 será executada em todas as voltas do loop). Mas, como apenas precisamos do tamanho do array, iremos declarar uma variável que receberá esta informação.

Veja abaixo o modo CORRETO:

  1. <?
  2. $frutas = array(‘maça’, ‘banana’, ‘morango’, ‘mamão’);
  3. $tamanho_do_array = count($frutas);
  4. echo ‘Gosto de:’;
  5. for($i=0; $i <= $tamanho_do_array; $i++){
  6.     echo $frutas[$i].‘, ‘;
  7. }
  8. ?>

Perceba que na linha 3 declaramos uma variável que vai conter o tamanho do array, para ser usada na linha 5.

(3) – Sempre que possível, libere variáveis que não serão mais usadas, principalmente array’s.

O PHP dispõe de uma função que é encarregada de APAGAR variáveis, veja abaixo como usá-la:

  1. <?
  2. unset($frutas); // ou unset($frutas[0]) para apagar um índice no caso de arrays
  3. ?>

(4) – Procure utilizar aspas simples para STRINGS.

Quando você usa aspas simples, o PHP não se preocupa em tentar interpretar o que tem dentro da STRING (variáveis e etc…).

Com aspas duplas você pode fazer isso: $texto = “meu texto com uma $variavel.”.

Ou seja, SEMPRE quando tiver aspas duplas, o PHP irá verificar se tem alguma variável para ser interpretada. No caso das aspas simples, ela não interpreta variáveis dentro dela, sendo assim, o PHP gasta menos tempo.

Utilize aspas duplas quando for usar “\n \t” e afins.

(5) – Sempre use caminhos absolutos para informar path’s.

Para informar path de includes e/ou requires, coloque o caminho completo, pois é gasto menos tempo resolvendo os caminhos do sistema operacional.

Utilize $_SERVER['DOCUMENT_ROOT'] para descobrir o caminho absoluto. Veja o exemplo abaixo:

  1. <?
  2. $caminho_absoluto = $_SERVER[‘DOCUMENT_ROOT’];
  3.  
  4. include ($caminho_absoluto.‘/includes/conexao.php’);
  5. include ($caminho_absoluto.‘/includes/funcoes.php’);
  6. ?>

Se mandar imprimir o seguinte: $caminho_absoluto.”/includes/conexao.php”, teríamos como resposta (rodando na minha maquina) o seguinte:

C:/xampp/htdocs/includes/conexao.php

O que esta em vermelho, você nunca vai precisar se preocupar! Pois sempre ele pegará o caminho do servidor.

(6) – Substituição

1) str_replace() é mais rápido que preg_replace(), mas strtr() é aproximadamente 4 vezes mais rápida do que str_replace().

2)

  1. <?
  2. str_replace(array(‘-’,‘!’), array(‘ ‘,‘.’), ‘Olá-Mundo!’);
  3. ?>

O código acima é mais lento que o código abaixo.

  1. <?
  2. $str = str_replace(‘-’,‘ ‘, ‘Olá-Mundo!’);
  3. $str = str_replace(‘!’,‘.’, $str);
  4. ?>

(7) – É mais rápido usar SWITCH do que vários “else if”

  1. <?
  2. switch ($mes) {
  3.     case 1:
  4.         echo ‘Janeiro’;
  5.         break;
  6.     case 2:
  7.         echo ‘Fevereiro’;
  8.         break;
  9.     case 3:
  10.         echo ‘Março’;
  11.         break;
  12.     case 4:
  13.         echo ‘Abril’;
  14.         break;
  15.     case 5:
  16.         echo ‘Maio’;
  17.         break;
  18. }
  19. ?>

O código acima roda mais rápido que o código abaixo

  1. <?
  2. if ($mes == ’1′){
  3.     echo ‘Janeiro’;
  4. } else if($mes == ’2′){
  5.     echo ‘Fevereiro’;
  6. } else if($mes == ’3′){
  7.     echo ‘Março’;
  8. } else if($mes == ’4′){
  9.     echo ‘Abril’;
  10. } else if($mes == ’5′){
  11.     echo ‘Maio’;
  12. }
  13. ?>

(8) – Nunca use @ para esconder os erros

Nunca, em hipótese alguma utilize o @ para esconder os erros. Este tipo de tratamento de erro é muito lento.

(9) – Acesse índice de arrays com chaves entre aspas

$row[’id’] é aproximadamente 7 vezes mais rápido que $row[id].

(10) – Declare variáveis para incrementos

Incrementar uma variável que já foi inicializada roda aproximadamente 9 vezes mais rápido do que uma variável que não foi incrementada.



Bom, por enquanto é isso… Se você não entendeu alguma coisa, ou não concorda, por favor poste seu comentário para que possamos trocar idéias…


Um grande abraço!

  1. 12 Comentários to “Otimização de códigos PHP (Parte 1)”

  2. Do caralho marcelo. Muito bom post!
    Uma curiosidade:
    Como vc determinou as velocidades para saber que um é x vezes mais rápido que outro?

    ReplyReply

    Por Diego Gomes (10 comments) em 15/09/2008

  3. Que bom que gostou 30!

    Tenho googlado e achado mtos blogs que falam sobre isso. Achei um site que mediu da seguinte forma: Faz um for(por exemplo) com 10000000 loops. E dentro deste for eles colocam alguma rotina(usar aspas duplas, depois simples, …). Desta forma, tem como medir quantos segundos(ou milisegundos) o script demorou pra rodar…

    No último post, vou colocar todas as fontes da minha pesquisa.

    Abração meu filho!!

    ReplyReply

    Por Marcelo Sabadini (101 comments) em 15/09/2008

  4. Muito legal Marcelo.
    Tem coisas muito úteis neste post. Parabéns cara

    ReplyReply

    Por Nosbielcs (3 comments) em 30/09/2008

  5. Valeu meu caro…

    O legal é que tem coisas que podem ser levadas para outras linguagens…

    A parte II ja esta no forno heheheh

    ReplyReply

    Por Marcelo Sabadini (101 comments) em 30/09/2008

  6. Muito bom! algumas coisas eu nao sabia (aspas simples mais rapida, ´ para acessar indice do array)… Essas dicas sao sempre bem vindas.
    Abraço!

    ReplyReply

    Por Fabio M. Costa (4 comments) em 08/10/2008

  7. Pois é Fabio… eu tmb nao sabia de muitas coisas. Estou preparando a segunda parte e vou postar as referências. Tem muito mais coisas… decidi colocar só as mais utilizadas mesmo heheheh

    Abraços e faleu pela contribuição!

    ReplyReply

    Por Marcelo Sabadini (101 comments) em 08/10/2008

  8. Olá Marcelo, o Mini Curso PHP é super interessante principalmente para quem está iniciando na linguagem, é muito bom poder encontrar pessoas como você que tem boa vontade e gosta do que faz, de ensinar.

    Como eu tenho acesso à todas as partes do curso, porque pesquisei mas não abre sequencial e confesso que encontro-me perdido.

    Agradeço pela orientação e ótimo trabalho!

    ReplyReply

    Por Sergio Santos (6 comments) em 01/12/2008

  9. Concordo com o começo do seu post: por ser muito fácil e ágil, se não tomar cuidado dá pra fazer muita “caca”.
    Nessas horas que uma boa formação em programação faz diferença!

    ReplyReply

    Por Chris Benseler (2 comments) em 29/05/2009

  10. Excelente artigo. Mas cadê a continuação? hehe

    Abraço!

    ReplyReply

    Por Paulo (1 comments) em 28/08/2009

  11. Pois é Paulo… estou devendo a continuação =/

    Mas estou com uma idéia legal para o POST. Ja estou até com ele em rascunho hehehehe

    Abraços!!!

    ReplyReply

    Por Marcelo Sabadini (101 comments) em 12/09/2009

  12. Muito bom o post, esclareceu bastante.

    Meus parabéns.

    ReplyReply

    Por Diogo Gêda (1 comments) em 30/03/2010

  13. Valew kara.

    ReplyReply

    Por dimitrikx (1 comments) em 03/07/2010

Coloque um Comentário

Links de comentários deveriam estar livres de nofollow.

Get Adobe Flash playerPlugin by wpburn.com wordpress themes