PDO ou Mysqli ?
2/12/2008
Ouvi falar muito bem sobre a API PDO, ela serve para acessar alguns bancos de dados via PHP, não podemos considerar uma abstração de banco de dados, já que ela só seleciona o driver do banco, o SQL tem algumas mudanças de banco pra banco, então mesmo utilizando-a você terá de reescrever algumas partes do seu código SQL se for mudar o base de dados utilizada.
Fiz um pequeno teste aqui local, é bem interessante tratando-se de orientação à objetos, entretando não realizei grandes testes de performance.
Eu venho há um tempo utilizando a extensão MySQLi do mysql, até mesmo utilizando uma classe de conexão que herda a classe MySQLi. Desde que passei a utilizá-la não tive problemas, pelo contrário, utilizei a extensão em uma aplicação um tanto quanto pesada e tive bons resultados, a performance foi boa.
Procurei em alguns websites brasileiros mais informações sobre a PDO e a MySQLi, não obtive resultados satisfatórios, então decidi procurar em alguns websites gringos e encontrei essa página:
http://dealnews.com/developers/php-mysql.html
ele realizou alguns testes com a PDO, MySQLi e a extensão mysql mais antiga.
Pelo que eu entendi na questão de performance a MySQLi foi a que apresentou os melhores resultados, como eu já desconfiava.
Creio que depende da aplicação a ser desenvolvida, no caso de ter certeza que só vai utilizar MySQL é interessante utilizar MySQLi, se for trabalhar com vários bancos de dados, talvez a PDO seja uma boa saída.
Eu gostei bastante da PDO na questão da orientação a objetos, quem sabe não desenvolvem uma interface única de acesso a banco de dados para PHP com performance tão boa quanto as que já existem hoje? Seria uma boa unificar e padronizar essas extensões.
Vinte e cinco dicas de performance para PHP
12/03/2008Seguem dicas de performance em PHP. (obs: são mais que 25)
- se um método pode ser static, declare-o como static. Isso irá aumentar a performance umas 4 vezes.
- echo é mais rápido do que print
- utilize o unset nas suas variáveis para liberar memória (bons tempos em que todo mundo sabia programar em C :P.. “free your mallocs”)
- não use require_once()
- utilize o caminho absoluto na hora de dar os includes, assim o PHP não perde tempo tentando resolver o caminho.
- str_replace é mais rápido do que preg_replace porém strtr é umas 4 vezes mais rápido do que str_replace
- utilizar @ para suprimir os erros é muito lento.
- habilite o mod_deflate no apache
- feche a sua conexão com o banco se você não irá mais utilizá-la (mas não fique abrindo e fechando toda hora!)
- $row[’abc’] é 7 vezes mais rápido do que $row[abc]
- não use funções dentro de um laço, como por exemplo, for ($x=0; $x < count($array); $x++) porque count() vai ser executada em todo ciclo do laço. Utilize: for ($x=0, $c=count($array); $x < $c; $x++).
- Incrementar uma variável global é duas vezes mais lento do que incrementar uma variável local
- acessar um atributo de um objeto ($obj->atributo++, por exemplo) é 3 vezes mais lento do que acessar uma variável local
- incrementar uma variável local não inicializada é 9-10 vezes mais lento do que se ela tivesse sido inicializada.
- aspas simples são mais rápidas que aspas duplas
- uma aplicação que faça cache dos scripts php vai aumentar a performance entre 25 e 100%.
- utilize cache sempre que possível. SEMPRE! (claro que isso tem um onus, mas estamos falando apenas em performance aqui)
- Se quiser testar o tamanho de uma string, utilize isset ao invés de strlen. Por exemplo: if (!isset($foo{5})) echo “foo eh mto pequeno!”;
- nem tudo precisa ser OO. Métodos e objetos tendem a consumir muito mais memória.
- não converta toda estrutura de dados em classes. Utilizar arrays é muito mais rápido.
- se você possui funções que demandam muito tempo de execução cogite transforma-las em uma extensão em C.
- habilitar o mod_gzip pode economizar em até 80% o tráfego de dados. Sua largura de banda agradece.
- evite usar SELECT *. Isso dificulta a manutenção e gasta tempo desnecessário de processamento para descobrir os campos e obter os valores do banco
- use switch ao invés de um monte de ifs
- json é mais rápido do que xml.
- Evite utilizar metódos mágicos como __get, __set e __autoload, se possível;
- Se você quer descobrir o tempo em que o script começou a ser executado, é preferível utilizar $_SERVER[´REQUEST_TIME´] do que time();
- Veja se pode utilizar strncasecmp, strpbrk e stripos ao invés de regex;
- Se uma função, como de substituição de strings, aceitar tanto arrays como caracteres simples como argumentos, e se a sua lista de argumentos não é muito longa, considere fazer algumas declarações redundantes de substituição, passando um caractere por vez, ao invés de uma linha de código que aceita arrays como argumentos de busca e substituição;
- Mensagens de erro demandam mais processamento;
- Utilize PHP Speedy
fonte: http://webpub.wordpress.com/2007/11/13/vinte-e-cinco-dicas-de-performance-para-php/
http://imasters.uol.com.br/artigo/8962/php/12_dicas_para_otimizar_seus_codigos_php/