PHP Papa-Léguas: Performance em PHP
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

PHP Papa-Léguas: Performance em PHP

  • 1,622 views
Uploaded on

Palestra sobre performance de aplicações PHP. Proferida na PHP Conference Brasil 2011.

Palestra sobre performance de aplicações PHP. Proferida na PHP Conference Brasil 2011.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,622
On Slideshare
1,573
From Embeds
49
Number of Embeds
1

Actions

Shares
Downloads
25
Comments
0
Likes
1

Embeds 49

http://localhost 49

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. PHP Papa-Léguas: Performance em PHP Flávio Gomes da Silva Lisboa www.fgsl.eti.br @fgsl
  • 2. Quem sou eu Analista do Serviço Federal de Processamento de Dados, instrutor e consultor independente. Evangelista PHP, especialista em arquitetura de software e contribuidor oficial do projeto Tine 2.0.
  • 3. Palestra-Bússola Cadê oguincho quenão chega?
  • 4. Inspiração
  • 5. Viagem ConceitualUm momento para estabelecer um ponto deintersecção: Entre o que você quer e o que você precisa Entre o que você acredita ser importante e o que é realmente importante Entre o que você pretende alcançar e suas consequências.
  • 6. Por que o Papa-Léguas?
  • 7. Por que o Coiote nunca pega o Papa-Léguas? Culpa do mau funcionamento dos produtos ACME? Culpa dos planos malfeitos do Coiote? O Papa-Léguas tem poderes sobrenaturais que o fazem realmente muito, muito rápido? O Coiote tem muito, muito azar?
  • 8. Não complique...
  • 9. Desfaça-se do desnecessário
  • 10. Mas cuidado!
  • 11. Lições pós Pearl Harbor 7 de dezembro de 1941
  • 12. Mitsubishi A6M2 Zero poder de manobra, alcance e razão de subida inigualáveis por qualquer caça ocidental, tanto de terra quanto embarcado
  • 13. Mas como?!
  • 14. privado de blindagem em relação à cabine do piloto e ao tanque de combustível
  • 15. Ataque Doolitle - 1942
  • 16. Ataque Doolitle - 1942Primeiro ataque aéreo dos EstadosUnidos às ilhas japonesas, 4 meses após o ataque a Pearl Harbor
  • 17. Mas como?! Remoção da torre de armas inferior Remoção do aparelho de rádio Substituição da mira Norden por uma mira improvisada, concebida pelo piloto Capitão Ross C. Greening e chamada de "Mark Twain" com materiais que custavam 20 centavos.
  • 18. Ataque Doolitle - 1942Todos os aviões caíram após o ataque.De 80 tripulantes:●3 morreram no ataque●8 foram capturados, sendo que 3 morreramexecutados e 1 por doença●O resto se refugiou na China.
  • 19. O equilíbrio entreperformancee segurança éfundamental
  • 20. Fatos PHP raramente é o gargalo. 80-90% do problema está no frontend. PHP está no backend. Mas você também pode acelerar os 20-10%.
  • 21. Primeiro, os 80-90% Mausoléu dos Carrapatos
  • 22. Google, 09/04/2010"Acelerar websites é importante - não apenas para osproprietários do site, mas para todos os usuários daInternet. Sites mais rápido fazem usuários felizes enós temos visto em nossos estudos internos que quandoum site responde lentamente, visitantes gastam menostempo lá. Mas os sites mais rápidos não apenasmelhoram a experiência do usuário; dados recentesmostram que a velocidade do site também melhorarreduz os custos operacionais. Como nós, nossosusuários dão muito valor à velocidade - é por isso quenós decidimos levar em conta a velocidade do site emrankings de pesquisa. Usamos uma variedade de fontespara determinar a velocidade de um site em relação aoutros sites. "
  • 23. Falando em Google... Page Speed é um complemento de código aberto para o Firefox/Firebug. Webmasters e desenvolvedores da web podem usá-lo para avaliar o desempenho de suas páginas web e receber sugestões sobre como melhorá-las. Está disponível no Google Code:http://code.google.com/intl/pt-BR/speed/page-speed
  • 24. E também tem o YSlow
  • 25. Regras Yahoo! para Alta Performance A resposta HTTP geralmente é um arquivo
  • 26. Regras Yahoo! para Alta Performance 1ª: Minimize as requisições HTTP
  • 27. Regras Yahoo! para Alta Performance 80-90% do tempo gasto na resposta ao usuário é no download de todos os componentes da página: imagens, CSS, Javascript, Flash, etc. Fato: esses componentes são estáticos. Ao invés de começar com a difícil tarefa de redesenhar a arquitetura de aplicativos, é melhor primeiro dispersar seu conteúdo estático. A proximidade do usuário com seu servidor tem impacto no tempo de resposta.
  • 28. Regras Yahoo! para Alta Performance2ª: Utilize uma rede de entrega de conteúdo(CDN)
  • 29. Regras Yahoo! para Alta PerformanceComo funciona?A escolha do servidor que irá entregar conteúdopara um usuário específico normalmente ébaseada em uma medida de proximidade derede. Por exemplo, o servidor com o menornúmero de pontos de transição de rede ou oservidor com menor tempo de resposta.
  • 30. Regras Yahoo! para Alta Performance3ª Use GZipDesde HTTP/1.1, os clientes Web indicam suporte paraa compressão com o cabeçalho Accept-Encoding nasolicitação HTTP.       Accept­Encoding: gzip, deflateSe o servidor web vê este cabeçalho na requisição,pode comprimir a resposta usando um dos métodoslistados pelo cliente. O servidor web notifica o clienteweb sobre isso via cabeçalho Content-Encoding naresposta.       Content­Encoding: gzip
  • 31. Regras Yahoo! para Alta Performance4ª Coloque as folhas de estilo no cabeçalho dapáginaPorque? Porque assim a página é renderizada progressivamente e o usuário não fica vendo uma tela em branco. Porque a especificação HTML diz pra fazer assim.
  • 32. Regras Yahoo! para Alta Performance5ª (Polêmica) Coloque os scripts no final dapágina.Porque? Scripts bloqueiam downloads paralelos. A especificação HTTP/1.1 sugere que o browser não faça download de mais de dois componentes em paralelo por endereço. Enquanto um script está sendo descarregado, o browser não pode iniciar outros downloads, mesmo que sejam de diferentes endereços.
  • 33. Regras Yahoo! para Alta Performance6ª Evite expressões CSS. Se não sabe o que éisso, esqueça, você é feliz. Era uma vez um navegador chamado Internet Explorer. Em sua versão 5 seus projetistas inventaram um modo de permitir que você usasse expressões Javascript em uma propriedade CSS. Parecia uma ideia fenomenal até que perceberam que as expressões eram avaliadas não somente quando a página era carregada, mas quando era redimensionada, rolada e quando o usuário passava o mouse sobre ela. Um movimento com o mouse poderia gerar mais de 10 mil avaliações, que consomem tempo de processamento no frontend.
  • 34. Regras Yahoo! para Alta Performance6ª Evite expressões CSS. Ao perceber o efeito Ravena, os projetistas decidiram tornar essa característica obsoleta a partir da versão 8.
  • 35. Regras Yahoo! para Alta Performance7ª Coloque Javascript e CSS em arquivosexternos Usar arquivos externos produz páginas mais rápidas porque o Javascript e CSS são cacheados pelo browser. Se você usar Javascript e CSS enxertados nos documentos HTML, eles serão descarregados a cada requisição do documento HTML. Bibliotecas Javascript como Dojo Toolkit ajudam a remover o Javascript remanescente dos documentos HTML.
  • 36. Regras Yahoo! para Alta Performance8ª Reduza a pesquisa de DNS O sistema de nomes de domínios mapeia endereços legíveis para endereços IP. Segundo o Yahoo!, um DNS resolver leva de 20 a 120ms para pesquisar o IP de um domínio. Enquanto a pesquisa não for completada, o browser não pode descarregar mais nada. Mas se você usar somente um domínio, reduzirá a quantidade de downloads paralelos que podem ocorrer na página. A recomendação Yahoo! é não ter mais de quatro domínios em seu site, para estabelecer o melhor compromisso entre um número reduzido de pesquisas DNS e uma quantidade suficiente de downloads paralelos.
  • 37. Regras Yahoo! para Alta Performance9ª Minifique Javascript e CSS O tempo de carga de uma página pode ser reduzido se a quantidade de texto Javascript e CSS que trafegarem pela rede for reduzida. Minificar é uma prática que consiste em remover caracteres que tornam o texto compreensível para um ser humano, mas que não fazem a menor diferença para o browser. Segundo o Yahoo!, a minificação pode reduzir em até 21% o conteúdo original. Minificar não é comprimir. A minificação pode reduzir ainda mais a quantidade de dados trafegados.
  • 38. Regras Yahoo! para Alta Performance10ª Evite usar redirect Quando se usa redirect, um tempo de espera é introduzido pois nada pode ser renderizado até que a página solicitada pelo redirecionamento seja devolvida pelo servidor. Isso pode implicar em uma tela em branco por tempo suficiente para desagradar o usuário. Se você precisa fazer redirecionamento, pode usar recursos do servidor, como Alias e mod_rewrite, do Apache. Ambos fazem mapeamento de endereços virtuais para recursos reais.
  • 39. Regras Yahoo! para Alta Performance11ª Remova scripts duplicados O número de scripts e o tamanho da equipe de desenvolvedores pode implicar na existência de scripts duplicados. Não é algo intencional, mas se depender apenas do controle humano, pode fatalmente acontecer. Scripts replicados implicam em requisições replicadas. Ou seja, uma requisição desnecessária é feita, porque ela já foi atendida pelo primeiro “clone” do script.
  • 40. Regras Yahoo! para Alta Performance12ª Avalie se o uso de ETags é necessário Entity Tags é um mecanismo de validação de cache do HTTP que cria um código baseado no estado de um conteúdo (Javascript, CSS, imagem, etc) para saber se o que está no servidor é diferente do que está no cache. O problema é que se você usar múltiplos servidores, ETags pode gerar códigos de verificação diferentes para o mesmo conteúdo, recuperado a partir de servidores diferentes. Ou seja, requisições desnecessárias podem ser feitas.
  • 41. Regras Yahoo! para Alta Performance13ª Otimize as respostas AJAX AJAX é Asynchronous Javascript and XML e não Instantaneous Javascript and XML. Todas as orientações anteriores podem ser aplicadas para respostas AJAX.
  • 42. Regras Yahoo! para Alta Performance15ª Use GET para requisições AJAX O Yahoo! descobriu que o método POST do objeto XMLHttpRequest é implementado nos browsers como um processo em duas etapas. Primeiro ele envia o cabeçalho, depois os dados. Se você não precisar mandar mais de 2K de dados, pode usar GET, que usa apenas um pacote TCP para ser enviado (exceto se houver muitos cookies).
  • 43. Regras Yahoo! para Alta Performance16 ª e 17ª Componentes Précarregados e Póscarregados Precarregar componentes significa aproveitar o momento em que o browser está desocupado para requisitar componentes que serão necessários no futuro. Poscarregar componentes significa verificar o que não é imediatamente necessário na página e deixar por último. Por exemplo, imagens e scripts de drag and drop.
  • 44. Regras Yahoo! para Alta Performance18 ª Reduza o número de elementos DOM Uma árvore DOM complexa significa mais bytes para serem carregados pelo browser. Corte o que não é necessário. A homepage do Yahoo!, para uma referência, tem menos de 700 elementos. O número de elementos DOM pode ser obtido com o seguinte Javascript: document.getElementsByTagName(*).length
  • 45. Regras Yahoo! para Alta Performance19 ª Divida os componentes entre domínios Para maximizar a quantidade de downloads paralelos, você pode ter mais de um domínio. Mas não esqueça da regra nº8.
  • 46. Regras Yahoo! para Alta Performance20 ª Minimize (ou remova) os iframes Contras do iframe  O documento a ser inserido no atual é procurado e mesmo que esteja em branco, desperdiçará uma requisição e uma resposta.  A montagem do iframe bloqueia o carregamento da página.
  • 47. Regras Yahoo! para Alta Performance21 ª Acabe com os erros 404 do HTTP Erro 404 é “página não encontrada” Não parece um problema de performance? Pois o usuário irá lhe dizer quanto tempo ele perdeu até saber o que fazer após levar um “Page Not Found” na cara.
  • 48. Regras Yahoo! para Alta Performance22 ª Reduza o tamanho dos cookies Elimine cookies desnecessários. Reduza o tamanho dos cookies. Configure uma data de expiração apropriada.
  • 49. Regras Yahoo! para Alta Performance23ª Use domínios sem cookie para componentes Quando o browser requisita uma imagem e ela envia cookies junto, o servidor não os usa pra nada. Assim eles só criam tráfego de rede. Crie um subdomínio livre de cookies, e hospede todos os componentes estáticos lá.
  • 50. Regras Yahoo! para Alta Performance24ª Reduza o acesso à arvore DOM Uma interface com o usuário rica oferece uma ao usuário uma experiência agradável, mas se você exagerar no dinamismo, vai introduzir lentidão ao acessar a árvore DOM muitas vezes. Verifique também os métodos de pesquisa dos nós, para utilizar as alternativas que tenham o melhor desempenho. Bibliotecas Javascript oferecem APIs que tem desempenho superior aos recursos equivalentes no Javascript padrão.
  • 51. Regras Yahoo! para Alta Performance25ª Desenvolva manipuladores de eventointeligentes Javascript suporta a propagação de eventos. Isso significa que um se um evento ocorrer para um elemento que não tem manipulador de eventos, será tratado pelo manipulador de eventos do nó pai. Dessa forma, se existirem eventos que serão disparados independente do elemento, você pode associar o evento apenas ao nó pai. Por exemplo, uma determinada função é executada para qualquer botão dentro de uma divisão de página. Associe o evento à divisão e não a cada botão.
  • 52. Regras Yahoo! para Alta Performance26ª Escolha <link> em vez de @import Segundo o Yahoo!, no IE, o @import tem o mesmo efeito de colocar <link> no final da página.27ª Evite o Filtro AlphaImageLoader Segundo o Yahoo!, esse filtro, disponível apenas nas versões do IE < 7, bloqueia a renderização da página e trava o browser enquanto a imagem está sendo descarregada.
  • 53. Regras Yahoo! para Alta Performance28ª Otimize as imagens29ª Otimize a forma como o CSS dispõe asimagens30ª Não use imagens maiores do que vocêprecisa Se você vai mostrar uma imagem com um tamanho de 100X100px, não precisa pegar uma imagem de 500X500px e redimensionar. Use uma imagem com o tamanho que você irá utilizar.
  • 54. Regras Yahoo! para Alta Performance31ª Faça o favicon.ico ficar bem pequeno Este é o ícone que aparece na barra de endereços do navegador. Você precisa dele porque se o browser procurá-lo e não achar, irá receber um erro HTTP 404.32ª Mantenha os componentes abaixo de 25K Esta é uma restrição do Iphone.33ª Empacote os componentes em umdocumento multi-partes. Isso permite que vários arquivos sejam recuperados com uma única requisição HTTP.
  • 55. Regras Yahoo! para Alta Performance34ª Evite tags <img> com atributo src vazio O browser tenta fazer uma requisição do mesmo jeito. Será que esse frontend não termina nunca?
  • 56. Agora, os 10-20%
  • 57. os em lL ue an M By2 ideias são especificamente sobre performance
  • 58. PHP não é uma linguagem compilada (MITO)“PHP não é uma linguagem interpretada desde o PHP 4, que foilançado no ano de 2000.Quando um script PHP é executado pela primeira vez, o código-fonte PHP é compilado pelo motor Zend em representaçõesbinárias chamadas opcodes. Estes opcodes são armazenados naárea de memória compartilhada do servidor. Em seguida, sãoexecutados.” MLEntão, PHP é uma linguagem compilada como Java, C # e outras.Caso contrário, seria bastante lento.
  • 59. E ainda tem mais!Você pode usar ofuscadores para gravar opcodescompilados em arquivos e distribuir a aplicaçãosem o código-fonte.
  • 60. E ainda mais rápido!Você pode compilar o PHPgerando código nativo damáquina onde será executado. Roadsend PHP (GPL) PHC PHP Open Source compiler HipHop for PHP (PHP/Zend)
  • 61. PHP não é bom para web sites ou aplicações escaláveis de alto desempenho“...desempenho e escalabilidade não são umaquestão de linguagem, mas sim uma questão dearquitetura de aplicação”.“A maioria das aplicações Web não fazem usointensivo da CPU. Por exemplo, uma dasatividades que as aplicações Web gastam amaior parte do tempo é o acesso a bancos dedados”. ML
  • 62. Arquitetura PHP é como tijolinhos da LEGO. Tijolinhos da LEGO permitem que você construa qualquer coisa.
  • 63. Arquitetura Mas PHP não é um brinquedo. Nós o usamos para construir “prédios” de verdade.
  • 64. Não faça de qualquer jeito
  • 65. Por favor!
  • 66. PHP é rápido...
  • 67. Como frear o PHP? Carregue arquivos sem precisar Não use cache Consulte o banco sem necessidade Não otimize o banco de dados Não faça processamento paralelo
  • 68. Carregamento de Arquivos Otimize o carregamento de arquivos. Só carregue quando precisar. Seja brasileiro e deixe tudo para a última hora. Estabeleça ou adote convenções para acelerar a busca pelos arquivos.
  • 69. Consulta ao banco sem necessidade Se existe informação frequentemente pesquisada no banco de dados que não muda, verifique se ela não pode ficar em outro lugar:  Arquivos de metadados.  Camada de modelo da aplicação. Frameworks ajudam nisso.
  • 70. Otimize o banco de dados
  • 71. Cache É mais rápido pegar o que está por perto. Sugestão: Memcached  Escalável: fácil adicionar máquinas e instâncias  RAM é muito mais rápido que I/O em disco  Alivia a carga do banco de dados  Muito flexível: pode armazenar qualquer dado, desde que não ultrapasse 1 MB  Biblioteca client disponível em PHP  Open Source
  • 72. Processamento Paralelo Sugestão: Gearman  Framework genérico para distribuir jobs a serem executados por uma ou mais máquinas  Permite uma aplicação executar tarefas em paralelo, com balanceamento da carga de processos, e até invocar códigos escritos em outras linguagens.  O nome é um anagrama para "Manager"  Criado pela Danga Interactive.  Open Source, rápido, escalável, tolerante a falhas, síncrono ou assíncrono.
  • 73. Faltou alguma coisa?
  • 74. Você utiliza metodologias ágeis para desenvolver?Uma das orientações de um processo dedesenvolvimento ágil e ter entregas curtas. Vocênão espera até o sistema inteiro estar pronto paraentregá-lo (e se frustrar com as negativas docliente).Isso é bom porque além de verificarconstantemente os requisitos, também mostrapara o cliente que o trabalho está sendorealizado, e em que estágio se encontra.
  • 75. Mas o que isso tem a ver com desempenho?Você quer que o usuário fique frustrado e furiosona expectativa de que a página em branco sejasubstituída por alguma informação, ou querdeixá-lo mais tranquilo, mostrando que a páginaserá montada?
  • 76. Olha a Regra Yahoo para Alta Performance que ficou faltando!14ª Libere o buffer no início Quando você requisita uma página, pode levar de 200 a 500ms para o backend montá-la e enviá-la. PHP tem a função flush() que permite que você envie parcialmente uma resposta HTML para o browser. Assim, o servidor pode ir enviando a página conforme ela vai sendo montada.
  • 77. Referênciashttp://www.slideshare.net/eminetto/ao-infinito-e-alm-com-php-memcached-e-gearmanhttp://www.slideshare.net/ijansch/enterprise-php-288851http://talks.php.net/show/digg www. fgsl.eti.br