Evitar utilizar funções em laços de repetição, utilizar aspas simples quando a string não precisa ser interpretada, utilizar um bom sistema de cache... Essas e outras várias atitudes podem significar um grande ganho de performance em softwares desenvolvidos em PHP e colaborar para o sucesso de um projeto.
Dicas para aumentar a performance de um software PHP
1. Dicas para aumentar a performance de
um software PHP
Almir Neto – almirneto@gmail.com
PHP Conference Brazil 2009
http://www.phpconf.com.br
Osasco, 27 de Novembro de 2009
2. Dicas para aumentar a performance de
um software PHP
Grupo de Desenvolvedores PHP de Goiás
● Lista de Discussão
● Troca de Conhecimentos
● Encontros
● Palestras
● Eventos
● http://www.php.org.br
● http://www.gophp.com.br
3. Dicas para aumentar a performance de um software PHP
Saída de dados
Almir Neto
almirneto@gmail.com
4. Dicas para aumentar a performance de um software PHP
1 - echo é mais rápido que print
http://www.faqts.com/knowledge_base/vie
w.phtml/aid/1/fid/40
Almir Neto
almirneto@gmail.com
5. Dicas para aumentar a performance de um software PHP
2 - Aspas simples são mais rápidas
com concatenação do que colocar
variáveis dentro de aspas duplas
Lento:
echo "Meu nome é $nome";
Rápido:
echo 'Meu nome é ' . $nome;
Almir Neto
almirneto@gmail.com
6. Dicas para aumentar a performance de um software PHP
3 - Utilizar vários parâmetros
com echo é mais rápido que
concatenar
Lento:
echo 'Em ' . $cidade . ' são ' . $horas . ' $horas ';
Rápido:
echo 'Em ', $cidade, ' são ', $horas, ' $horas ';
Almir Neto
almirneto@gmail.com
7. Dicas para aumentar a performance de um software PHP
Laços de Repetição
Almir Neto
almirneto@gmail.com
8. Dicas para aumentar a performance de um software PHP
Chamadas de funções são lentas!
4 - Não utilize chamadas a funções no bloco
de controle do laço de repetição for()
Fazendo isso a chamada será feita em cada iteração do laço de repetição
Lento:
for ( $i = 1; $i < sizeof($array); $i++ ) {}
Rápido:
$size = sizeof($array);
for ( $i = 1; $i < $size; $i++ ) {}
Almir Neto
almirneto@gmail.com
9. Dicas para aumentar a performance de um software PHP
5 - strlen() é muito lento!
Ao checar o tamanho de strings, ao invés de utilizar strlen(),
utilize isset se for possível
Lento:
if(strlen($_POST['nome']) < 5) echo 'O campo nome é menor
do que cinco';
Rápido:
if(!isset($_POST['nome']{5})) echo 'O campo nome é menor do
que cinco';
Almir Neto
almirneto@gmail.com
10. Dicas para aumentar a performance de um software PHP
6 - Utilize pré-incremento
Pré-incrementar variáveis é 10% mais rápido que pós-incrementar
Lento:
$contador++;
Rápido:
++$contador;
Almir Neto
almirneto@gmail.com
11. Dicas para aumentar a performance de um software PHP
7 - Incrementar uma variável
indefinida é até 10 vezes mais
lento que uma pré-inicializada.
Almir Neto
almirneto@gmail.com
12. Dicas para aumentar a performance de um software PHP
8 - Incrementar uma variável
global é mais lento que uma
variável local.
Almir Neto
almirneto@gmail.com
13. Dicas para aumentar a performance de um software PHP
9 - Incrementar um
atributo($this->var++) é mais
lento que uma variável local.
Almir Neto
almirneto@gmail.com
14. Dicas para aumentar a performance de um software PHP
Variáveis e Funções
Almir Neto
almirneto@gmail.com
15. Dicas para aumentar a performance de um software PHP
10 - Libere memória
Utilize unset() para liberar as variáveis que não for mais
utilizar, principalmente grandes arrays
Almir Neto
almirneto@gmail.com
16. Dicas para aumentar a performance de um software PHP
11 - Utilize require() e include()
ao invés de require_once() e
include_once()
Almir Neto
almirneto@gmail.com
17. Dicas para aumentar a performance de um software PHP
12 - Sempre utilize caminho
completo ao incluir arquivos
Lento:
include('noticias.php');
Rápido:
include('/var/www/html/noticias.php');
Almir Neto
almirneto@gmail.com
18. Dicas para aumentar a performance de um software PHP
13 - Switch é lento. Utilize else if
para testes múltiplos.
Almir Neto
almirneto@gmail.com
19. Dicas para aumentar a performance de um software PHP
14 - Evite funções inúteis
Ao invés de utilizar as funções:
- php_version();
- php_uname('s');
- php_sapi_name();
Utilize as constantes:
- PHP_VERSION
- PHP_OS
- PHP_SAPI
Almir Neto
almirneto@gmail.com
20. Dicas para aumentar a performance de um software PHP
15 - Não utilize funções para descobrir se o
SO é Windows
Rápido e Fácil:
$windows = DIRECTORY_SEPARATOR == '';
Almir Neto
almirneto@gmail.com
21. Dicas para aumentar a performance de um software PHP
16 - Para descobrir a hora correta com
precisão não utilize funções
Rápido:
$_SERVER['REQUEST_TIME']
Almir Neto
almirneto@gmail.com
22. Dicas para aumentar a performance de um software PHP
17 - Evite utilizar expressões regulares
Lento:
if (preg_match("!string!i", "text")) {}
Rápido:
if (stripos("text", "string") !== false) {}
Almir Neto
almirneto@gmail.com
23. Dicas para aumentar a performance de um software PHP
18 - Jamais utilize @ para suprimir erros
Internamente o caracter @ faz intensas operações
// @action();
$old = ini_set(“error_reporting”, 0);
action();
ini_set(“error_reporting”, $old);
Almir Neto
almirneto@gmail.com
24. Dicas para aumentar a performance de um software PHP
19 - Compare strings com a função que tem
essa finalidade
Muito Lento:
if (preg_match('!^WIN!', PHP_OS)) {
if (preg_match('!^WIN!i', PHP_OS)) {
Lento:
if (substr(PHP_OS, 0, 3) == 'WIN') {
if (strtolower(substr(PHP_OS, 0, 3))) == 'win') {
Rápido:
if (!strncmp(PHP_OS, 'WIN', 3)) {
if (!strncasecmp(PHP_OS, 'WIN', 3)) {
Almir Neto
almirneto@gmail.com
25. Dicas para aumentar a performance de um software PHP
20 - Utilize substr_compare() para comparar
pedaços de strings
Lento:
if (substr($class, -15) != 'text')
Rápido
if (substr_compare($class, 'text', -15))
Almir Neto
almirneto@gmail.com
26. Dicas para aumentar a performance de um software PHP
Arrays
Almir Neto
almirneto@gmail.com
27. Dicas para aumentar a performance de um software PHP
21 - Itens de arrays que são strings devem
ser chamados como strings
$array = array('chave' => 'valor');
Lento:
$array[chave] = 0;
Rápido:
$array['chave'];
O PHP primeiramente procura pela constante chave, e depois converte essa
constante para string. Um erro do tipo E_NOTICE é gerado
Almir Neto
almirneto@gmail.com
28. Dicas para aumentar a performance de um software PHP
22 - Referências podem aumentar a
performance
$array['b']['c'] = array();
Lento:
for($cont = 0; $cont < 5; $cont++)
$array['b']['c'][$cont] = $cont;
Rápido:
$referencia =& $array['b']['c'];
for($cont = 0; $cont < 5; $cont++)
$referencia[$cont] = $cont;
Almir Neto
almirneto@gmail.com
29. Dicas para aumentar a performance de um software PHP
Orientação a Objetos
Almir Neto
almirneto@gmail.com
30. Dicas para aumentar a performance de um software PHP
23 - Sempre declare seus
métodos como estáticos
Almir Neto
almirneto@gmail.com
31. Dicas para aumentar a performance de um software PHP
24 - Utilize constantes de
classes
- São analisadas na compilação, não sobrecarregando a
execução.
Almir Neto
almirneto@gmail.com
32. Dicas para aumentar a performance de um software PHP
25 - Não utilize métodos mágicos
- __get()
- __set()
- __autoload()
- __call()
Almir Neto
almirneto@gmail.com
33. Dicas para aumentar a performance de um software PHP
26 - Métodos de classes filhas
são mais rápidos que métodos
da classe base
Almir Neto
almirneto@gmail.com
34. Dicas para aumentar a performance de um software PHP
27 - Somente utilize POO
quando for realmente necessário
Sistemas POO são ligeiramente mais lentos pois chamadas
a métodos e objetos consomem muita memória.
Almir Neto
almirneto@gmail.com
35. Dicas para aumentar a performance de um software PHP
Outras Dicas
Almir Neto
almirneto@gmail.com
36. Dicas para aumentar a performance de um software PHP
28 - Quando tiver páginas
estáticas, não utilize a
extensão .php, mas .html
Dessa maneira o interpretador do PHP nem é chamado, e
os dados são enviados diretamente ao navegador do
cliente.
Almir Neto
almirneto@gmail.com
37. Dicas para aumentar a performance de um software PHP
29 - Escreva suas funções em C
O PHP permite a escrita de funções em C e utilizá-las como
extensão do PHP. Dessa maneira a velocidade aumenta
consideravelmente, pois a função estará compilada no
núcleo do PHP.
Almir Neto
almirneto@gmail.com
38. Dicas para aumentar a performance de um software PHP
30 - Sempre feche as conexões
com o banco de dados após a
sua utilização
Almir Neto
almirneto@gmail.com
39. Dicas para aumentar a performance de um software PHP
31 - Utilize uma solução de
cache
Os scripts PHP são recompilados a cada requisição. Com
uma solução de cache essa recompilação não é feita a todo
o tempo.
Almir Neto
almirneto@gmail.com
40. Dicas para aumentar a performance de um software PHP
32 - Utilize um sistema de profile
para descobrir onde há gargalos
na aplicação
Almir Neto
almirneto@gmail.com
41. Dicas para aumentar a performance de um software PHP
33 – Use Linux!!
Testes utilizando Linux/Apache e
Windows/Apache mostram que o Linux
chega a ser 7x mais rápido que o Windows
para interpretar PHP.
http://www.paessler.com/webstress/sample_performance_tests/co
mparing_php_script_performance_on_linux_and_windows
Almir Neto
almirneto@gmail.com
42. Dicas para aumentar a performance de um software PHP
Configurações do Servidor
Almir Neto
almirneto@gmail.com
43. Dicas para aumentar a performance de um software PHP
IO de arquivos
- Deixe a lista do atributo DirectoryIndex o mais curto
possível;
- Quando possível desabilite o .htaccess através do
atributo AllowOverride none;
- Se a gravação de logs for desnecessária, desabilite-os;
- Se os logs forem realmente necessários, grave tudo em
um só arquivo.
Almir Neto
almirneto@gmail.com
44. Dicas para aumentar a performance de um software PHP
Controle de Saída
Habilite Output Buffering em um script com ob_start() ou
para todos os scripts com o atributo output_buffering = On
Dessa maneira a página é enviada de uma só vez para o
sistema operacional, aumentando o tempo de renderização
do navegador
Almir Neto
almirneto@gmail.com
45. Dicas para aumentar a performance de um software PHP
Controle de Saída
Menor quantidade de saída = Maior performance
- Reduz a utilização de recursos do servidor como CPU, HD e Memória
- A página carrega mais rapidamente
- Diminui o tráfego de dados na rede, que geralmente é o maior gargalo
em aplicações.
Almir Neto
almirneto@gmail.com
46. Dicas para aumentar a performance de um software PHP
Conteúdo Estático
Para conteúdo dinâmico o Apache é ótimo, porém para
conteúdo estático há outros servidores web bem mais
rápidos.
- lighttpd
- boa
- tux
- thttpd
Para conteúdo estático esses servidores chegam a ser 400% mais
rápidos que o Apache.
Almir Neto
almirneto@gmail.com
47. Dicas para aumentar a performance de um software PHP
Compressão de Dados
A maioria dos navegadores suporta dados comprimidos
- Páginas comprimidas são até 8 vezes menores
-> Apache 1 - mod_gzip / mod_deflate
-> Apache 2 - mod_deflate
-> PHP
- Em um script: ob_start('ob_gzhandler');
- Nas configurações do PHP: zlib.output_compression = 1
Almir Neto
almirneto@gmail.com
48. Dicas para aumentar a performance de um software PHP
Configurações do PHP
- register_globals = Off
- magic_quotes_gpc = Off
- expose_php = Off
- register_argc_argv = Off
- always_populate_raw_post_data = Off
- session.use_trans_sid = Off
- session.auto_start = Off
- session.gc_divisor = 1000 or 10000
Almir Neto
almirneto@gmail.com
49. Dicas para aumentar a performance de um software PHP
Armazenamento de Sessões
- Por padrão o PHP armazena cada sessão em um arquivo separado
- Muitos arquivos em um só diretório reduz a velocidade de acesso
-> Grave as sessões em vários diretórios
session.save_path = "N;path"
- Grave as sessões na memória
-> apc
-> memcache
Almir Neto
almirneto@gmail.com
50. Dicas para aumentar a performance de um software PHP
Bibliografia / Agradecimentos
• PHP & Performance:
- Ilia Alshanetsky
http://talks.php.net/show/perf_tunning
• PHP Optimization Tips
http://progtuts.info/55/php-optimization-tips/
• Dicas de otimização do servidor:
http://phplens.com/lens/php-book/optimizing-debugging-php.php
• Artigos da IBM sobre PHP:
http://www.ibm.com/developerworks/opensource/top-projects/php.html
http://www.ibm.com/developerworks/views/opensource/libraryview.jsp?
search_by=make+php+apps+fast
• Paessler
http://www.paessler.com/webstress/sample_performance_tests/comparing_
php_script_performance_on_linux_and_windows
Almir Neto
almirneto@gmail.com
51. Dicas para aumentar a performance de um software PHP
Fim
Almir Neto
almirneto@gmail.com