dicas para aumentar a performance de um software php

51
Dicas para aumentar a performance de um software PHP Almir Neto – [email protected] PHP Conference Brazil 2009 http://www.phpconf.com.br Osasco, 27 de Novembro de 2009

Upload: almir-neto

Post on 06-Jun-2015

4.900 views

Category:

Technology


0 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir Neto – [email protected]

PHP Conference Brazil 2009

http://www.phpconf.com.br

Osasco, 27 de Novembro de 2009

Page 2: Dicas para aumentar a performance de um software PHP

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

Page 3: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

Saída de dados

Page 4: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

1 - echo é mais rápido que print

http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40

Page 5: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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;

Page 6: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

3 - Utilizar vários parâmetros com echo é mais rápido que

concatenarLento:echo 'Em ' . $cidade . ' são ' . $horas . ' $horas ';

Rápido:echo 'Em ', $cidade, ' são ', $horas, ' $horas ';

Page 7: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

Laços de Repetição

Page 8: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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++ ) {}

Page 9: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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';

Page 10: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

6 - Utilize pré-incremento

Pré-incrementar variáveis é 10% mais rápido que pós-incrementar

Lento:$contador++;

Rápido:++$contador;

Page 11: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

7 - Incrementar uma variável indefinida é até 10 vezes mais lento que uma pré-inicializada.

Page 12: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

8 - Incrementar uma variável global é mais lento que uma

variável local.

Page 13: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

9 - Incrementar um atributo($this->var++) é mais lento que uma variável local.

Page 14: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

Variáveis e Funções

Page 15: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

10 - Libere memóriaUtilize unset() para liberar as variáveis que não for mais

utilizar, principalmente grandes arrays

Page 16: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

11 - Utilize require() e include() ao invés de require_once() e

include_once()

Page 17: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

12 - Sempre utilize caminho completo ao incluir arquivos

Lento: include('noticias.php');

Rápido:include('/var/www/html/noticias.php');

Page 18: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

13 - Switch é lento. Utilize else if para testes múltiplos.

Page 19: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

14 - Evite funções inúteisAo invés de utilizar as funções:- php_version();- php_uname('s');- php_sapi_name();

Utilize as constantes:- PHP_VERSION- PHP_OS- PHP_SAPI

Page 20: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

15 - Não utilize funções para descobrir se o SO é Windows

Rápido e Fácil:$windows = DIRECTORY_SEPARATOR == '\\';

Page 21: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

16 - Para descobrir a hora correta com precisão não utilize funções

Rápido:$_SERVER['REQUEST_TIME']

Page 22: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

17 - Evite utilizar expressões regulares

Lento:if (preg_match("!string!i", "text")) {}

Rápido:if (stripos("text", "string") !== false) {}

Page 23: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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);

Page 24: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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)) {

Page 25: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

20 - Utilize substr_compare() para comparar pedaços de strings

Lento:if (substr($class, -15) != 'text')

Rápidoif (substr_compare($class, 'text', -15))

Page 26: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

Arrays

Page 27: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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

Page 28: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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;

Page 29: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

Orientação a Objetos

Page 30: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

23 - Sempre declare seus métodos como estáticos

Page 31: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

24 - Utilize constantes de classes

- São analisadas na compilação, não sobrecarregando a execução.

Page 32: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

25 - Não utilize métodos mágicos

- __get()- __set()- __autoload()- __call()

Page 33: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

26 - Métodos de classes filhas são mais rápidos que métodos

da classe base

Page 34: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

27 - Somente utilize POO quando for realmente necessárioSistemas POO são ligeiramente mais lentos pois chamadas

a métodos e objetos consomem muita memória.

Page 35: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

Outras Dicas

Page 36: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

28 - Quando tiver páginas estáticas, não utilize a

extensão .php, mas .htmlDessa maneira o interpretador do PHP nem é chamado, e

os dados são enviados diretamente ao navegador do cliente.

Page 37: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

29 - Escreva suas funções em CO 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.

Page 38: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

30 - Sempre feche as conexões com o banco de dados após a

sua utilização

Page 39: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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.

Page 40: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

32 - Utilize um sistema de profile para descobrir onde há gargalos

na aplicação

Page 41: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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/comparing_php_script_performance_on_linux_and_windows

Page 42: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

Configurações do Servidor

Page 43: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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.

Page 44: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

Controle de SaídaHabilite 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

Page 45: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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.

Page 46: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

Conteúdo EstáticoPara 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.

Page 47: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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

Page 48: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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

Page 49: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Almir [email protected]

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

Page 50: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Bibliografia / Agradecimentos• PHP & Performance:

- Ilia Alshanetskyhttp://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

• Paesslerhttp://www.paessler.com/webstress/sample_performance_tests/comparing_php_script_performance_on_linux_and_windows

Almir [email protected]

Page 51: Dicas para aumentar a performance de um software PHP

Dicas para aumentar a performance de um software PHP

Fim

Almir [email protected]