Dicas para aumentar a performance de um software PHP

Post on 06-Jun-2015

4.899 views 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 of Dicas para aumentar a performance de um software PHP

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

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

Saída de dados

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

1 - echo é mais rápido que print

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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;

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

Laços de Repetição

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

6 - Utilize pré-incremento

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

Lento:$contador++;

Rápido:++$contador;

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

variável local.

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

Variáveis e Funções

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

utilizar, principalmente grandes arrays

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

include_once()

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

12 - Sempre utilize caminho completo ao incluir arquivos

Lento: include('noticias.php');

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Rápido:$_SERVER['REQUEST_TIME']

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

17 - Evite utilizar expressões regulares

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

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

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

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

Arrays

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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;

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

Orientação a Objetos

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

24 - Utilize constantes de classes

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

da classe base

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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.

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

Outras Dicas

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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.

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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.

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

sua utilização

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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.

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

na aplicação

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

Configurações do Servidor

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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.

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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.

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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.

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

Dicas para aumentar a performance de um software PHP

Almir Netoalmirneto@gmail.com

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

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 Netoalmirneto@gmail.com

Dicas para aumentar a performance de um software PHP

Fim

Almir Netoalmirneto@gmail.com