SlideShare uma empresa Scribd logo
1 de 78
Baixar para ler offline
PHP Papa-Léguas: Performance em PHP




      Flávio Gomes da Silva Lisboa
              www.fgsl.eti.br
                 @fgsl
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.
Palestra-Bússola

  Cadê o
guincho que
não chega?
Inspiração
Viagem Conceitual

Um momento para estabelecer um ponto de
intersecçã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.
Por que o Papa-Léguas?
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?
Não complique...
Desfaça-se do desnecessário
Mas cuidado!
Lições pós Pearl Harbor




      7 de dezembro de 1941
Mitsubishi A6M2 Zero




       poder de manobra, alcance e razão
       de subida inigualáveis por qualquer
       caça ocidental, tanto de terra
       quanto embarcado
Mas como?!
privado de blindagem em relação à cabine do
      piloto e ao tanque de combustível
Ataque Doolitle - 1942
Ataque Doolitle - 1942




Primeiro ataque aéreo dos Estados
Unidos às ilhas japonesas, 4 meses
   após o ataque a Pearl Harbor
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.
Ataque Doolitle - 1942




Todos os aviões caíram após o ataque.
De 80 tripulantes:
●3 morreram no ataque

●8 foram capturados, sendo que 3 morreram

executados e 1 por doença
●O resto se refugiou na China.
O equilíbrio
    entre
performance
e segurança
      é
fundamental
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%.
Primeiro, os 80-90%




                      Mausoléu dos
                       Carrapatos
Google, 09/04/2010

"Acelerar websites é importante - não apenas para os
proprietários do site, mas para todos os usuários da
Internet. Sites mais rápido fazem usuários felizes e
nós temos visto em nossos estudos internos que quando
um site responde lentamente, visitantes gastam menos
tempo lá. Mas os sites mais rápidos não apenas
melhoram a experiência do usuário; dados recentes
mostram que a velocidade do site também melhorar
reduz os custos operacionais. Como nós, nossos
usuários dão muito valor à velocidade - é por isso que
nós decidimos levar em conta a velocidade do site em
rankings de pesquisa. Usamos uma variedade de fontes
para determinar a velocidade de um site em relação a
outros sites. "
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
E também tem o YSlow
Regras Yahoo! para Alta Performance

   A resposta HTTP geralmente é um arquivo
Regras Yahoo! para Alta Performance

   1ª: Minimize as requisições HTTP
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.
Regras Yahoo! para Alta Performance

2ª: Utilize uma rede de entrega de conteúdo
(CDN)
Regras Yahoo! para Alta Performance

Como funciona?
A escolha do servidor que irá entregar conteúdo
para um usuário específico normalmente é
baseada em uma medida de proximidade de
rede. Por exemplo, o servidor com o menor
número de pontos de transição de rede ou o
servidor com menor tempo de resposta.
Regras Yahoo! para Alta Performance

3ª Use GZip
Desde HTTP/1.1, os clientes Web indicam suporte para
a compressão com o cabeçalho Accept-Encoding na
solicitação HTTP.
       Accept­Encoding: gzip, deflate
Se o servidor web vê este cabeçalho na requisição,
pode comprimir a resposta usando um dos métodos
listados pelo cliente. O servidor web notifica o cliente
web sobre isso via cabeçalho Content-Encoding na
resposta.
       Content­Encoding: gzip
Regras Yahoo! para Alta Performance

4ª Coloque as folhas de estilo no cabeçalho da
página
Porque?
   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.
Regras Yahoo! para Alta Performance

5ª (Polêmica) Coloque os scripts no final da
pá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.
Regras Yahoo! para Alta Performance

6ª 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.
Regras Yahoo! para Alta Performance

6ª Evite expressões CSS.

   Ao perceber o efeito Ravena, os
    projetistas decidiram tornar essa
    característica obsoleta a partir da
    versão 8.
Regras Yahoo! para Alta Performance

7ª Coloque Javascript e CSS em arquivos
externos

   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.
Regras Yahoo! para Alta Performance

8ª 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.
Regras Yahoo! para Alta Performance

9ª 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.
Regras Yahoo! para Alta Performance

10ª 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.
Regras Yahoo! para Alta Performance

11ª 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.
Regras Yahoo! para Alta Performance

12ª 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.
Regras Yahoo! para Alta Performance

13ª 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.
Regras Yahoo! para Alta Performance

15ª 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).
Regras Yahoo! para Alta Performance

16 ª e 17ª Componentes Précarregados e Pós
carregados

   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.
Regras Yahoo! para Alta Performance

18 ª 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
Regras Yahoo! para Alta Performance

19 ª 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.
Regras Yahoo! para Alta Performance

20 ª 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.
Regras Yahoo! para Alta Performance

21 ª 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.
Regras Yahoo! para Alta Performance

22 ª Reduza o tamanho dos cookies

   Elimine cookies desnecessários.
   Reduza o tamanho dos cookies.
   Configure uma data de expiração apropriada.
Regras Yahoo! para Alta Performance

23ª 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á.
Regras Yahoo! para Alta Performance

24ª 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.
Regras Yahoo! para Alta Performance

25ª     Desenvolva manipuladores de evento
inteligentes

   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.
Regras Yahoo! para Alta Performance

26ª 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.
Regras Yahoo! para Alta Performance

28ª Otimize as imagens
29ª Otimize a forma como              o CSS dispõe as
imagens
30ª 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.
Regras Yahoo! para Alta Performance


31ª 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     um
documento multi-partes.
   Isso permite que vários arquivos sejam recuperados com uma
    única requisição HTTP.
Regras Yahoo! para Alta Performance


34ª 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?
Agora, os 10-20%
os
                                             em
                                           lL
                                         ue
                                       an
                                      M
                                     By
2 ideias são especificamente sobre performance
PHP não é uma linguagem
         compilada (MITO)
“PHP não é uma linguagem interpretada desde o PHP 4, que foi
lançado no ano de 2000.
Quando um script PHP é executado pela primeira vez, o código-
fonte PHP é compilado pelo motor Zend em representações
binárias chamadas opcodes. Estes opcodes são armazenados na
área de memória compartilhada do servidor. Em seguida, são
executados.”




       ML


Então, PHP é uma linguagem compilada como Java, C # e outras.
Caso contrário, seria bastante lento.
E ainda tem mais!

Você pode usar ofuscadores para gravar opcodes
compilados em arquivos e distribuir a aplicação
sem o código-fonte.
E ainda mais rápido!

Você pode compilar o PHP
gerando código nativo da
máquina onde será executado.
   Roadsend PHP (GPL)
   PHC PHP Open Source compiler
   HipHop for PHP (PHP/Zend)
PHP não é bom para web sites ou aplicações
      escaláveis de alto desempenho

“...desempenho e escalabilidade não são uma
questão de linguagem, mas sim uma questão de
arquitetura de aplicação”.


“A maioria das aplicações Web não   fazem uso
intensivo da CPU. Por exemplo,       uma das
atividades que as aplicações Web     gastam a
maior parte do tempo é o acesso a   bancos de
dados”.

                      ML
Arquitetura

   PHP é como tijolinhos da LEGO.
   Tijolinhos da LEGO permitem que você construa
    qualquer coisa.
Arquitetura

   Mas PHP não é um brinquedo.
   Nós o usamos para construir “prédios” de verdade.
Não faça de qualquer jeito
Por favor!
PHP é rápido...
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
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.
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.
Otimize o banco de dados
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
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.
Faltou alguma coisa?
Você utiliza metodologias ágeis para
                 desenvolver?

Uma das orientações de um processo de
desenvolvimento ágil e ter entregas curtas. Você
não espera até o sistema inteiro estar pronto para
entregá-lo (e se frustrar com as negativas do
cliente).
Isso é bom porque além de verificar
constantemente os requisitos, também mostra
para o cliente que o trabalho está sendo
realizado, e em que estágio se encontra.
Mas o que isso tem a ver com desempenho?


Você quer que o usuário fique frustrado e furioso
na expectativa de que a página em branco seja
substituída por alguma informação, ou quer
deixá-lo mais tranquilo, mostrando que a página
será montada?
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.
Referências
http://www.slideshare.net/eminetto/ao-infinito-e-alm-com-php-memcached-e-gearman
http://www.slideshare.net/ijansch/enterprise-php-288851
http://talks.php.net/show/digg




                             www. fgsl.eti.br

Mais conteúdo relacionado

Mais procurados

Gestão de Conteúdos com Aplicações Instaladas em Servidores
Gestão de Conteúdos com Aplicações Instaladas em ServidoresGestão de Conteúdos com Aplicações Instaladas em Servidores
Gestão de Conteúdos com Aplicações Instaladas em ServidoresFabioMDias
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressJulian Fernandes
 
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014Celso Fernandes
 
Ebook - Check-list otimização WordPress
Ebook - Check-list otimização WordPressEbook - Check-list otimização WordPress
Ebook - Check-list otimização WordPressDaniel Paz
 
WordCamp SP 2014 - SEO para Desenvolvedores WordPress
WordCamp SP 2014 - SEO para Desenvolvedores WordPressWordCamp SP 2014 - SEO para Desenvolvedores WordPress
WordCamp SP 2014 - SEO para Desenvolvedores WordPressRuan Barbosa
 
Performance (Web&PHP)
Performance (Web&PHP)Performance (Web&PHP)
Performance (Web&PHP)Nuno Loureiro
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnicaSilvio Dias
 
PHP - Capítulo 01
PHP - Capítulo 01PHP - Capítulo 01
PHP - Capítulo 01fdorado
 
Desenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDesenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDaniel Paz
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
 
Técnicas de frontend para aplicações django - PythonBrasil[9]
Técnicas de frontend para aplicações django  - PythonBrasil[9]Técnicas de frontend para aplicações django  - PythonBrasil[9]
Técnicas de frontend para aplicações django - PythonBrasil[9]Rael Max
 
Building Scalable Applications
Building Scalable ApplicationsBuilding Scalable Applications
Building Scalable Applicationsracx
 
Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Guga Alves
 
IBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticasIBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticasrodrigoareis
 

Mais procurados (20)

Gestão de Conteúdos com Aplicações Instaladas em Servidores
Gestão de Conteúdos com Aplicações Instaladas em ServidoresGestão de Conteúdos com Aplicações Instaladas em Servidores
Gestão de Conteúdos com Aplicações Instaladas em Servidores
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPress
 
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
 
Desenvolvimento web produtivo
Desenvolvimento web produtivoDesenvolvimento web produtivo
Desenvolvimento web produtivo
 
Ebook - Check-list otimização WordPress
Ebook - Check-list otimização WordPressEbook - Check-list otimização WordPress
Ebook - Check-list otimização WordPress
 
WordCamp SP 2014 - SEO para Desenvolvedores WordPress
WordCamp SP 2014 - SEO para Desenvolvedores WordPressWordCamp SP 2014 - SEO para Desenvolvedores WordPress
WordCamp SP 2014 - SEO para Desenvolvedores WordPress
 
Alta performance de Aplicações Web
Alta performance de Aplicações WebAlta performance de Aplicações Web
Alta performance de Aplicações Web
 
Performance (Web&PHP)
Performance (Web&PHP)Performance (Web&PHP)
Performance (Web&PHP)
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnica
 
PHP - Capítulo 01
PHP - Capítulo 01PHP - Capítulo 01
PHP - Capítulo 01
 
Security & PHP
Security & PHPSecurity & PHP
Security & PHP
 
Desenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDesenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi Builder
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 
Técnicas de frontend para aplicações django - PythonBrasil[9]
Técnicas de frontend para aplicações django  - PythonBrasil[9]Técnicas de frontend para aplicações django  - PythonBrasil[9]
Técnicas de frontend para aplicações django - PythonBrasil[9]
 
Building Scalable Applications
Building Scalable ApplicationsBuilding Scalable Applications
Building Scalable Applications
 
Apostila ph pwamp
Apostila ph pwampApostila ph pwamp
Apostila ph pwamp
 
Web seminario varnish
Web seminario varnishWeb seminario varnish
Web seminario varnish
 
Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013
 
Web Performance Client Side
Web Performance Client SideWeb Performance Client Side
Web Performance Client Side
 
IBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticasIBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticas
 

Semelhante a PHP Papa-Léguas: Performance em PHP

Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemRodrigo Valerio
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sitesthiagolima
 
Aumente a performance de seu site
Aumente a performance de seu siteAumente a performance de seu site
Aumente a performance de seu siteHenrique Lima
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaHenrique Lima
 
Otimização Front-end para WordPress
Otimização Front-end para WordPressOtimização Front-end para WordPress
Otimização Front-end para WordPressGuga Alves
 
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchXen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchBernardo Donadio
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneosFernando Ike
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
Dicas para otimizar o WordPress por Felipe Figueiredo
Dicas para otimizar o WordPress por Felipe FigueiredoDicas para otimizar o WordPress por Felipe Figueiredo
Dicas para otimizar o WordPress por Felipe FigueiredoWordCamp Floripa
 
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesPrecisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesJackson F. de A. Mafra
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento webRodrigo Rodrigues
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformAndré Paulovich
 
Alta Performance em Aplicações Web
Alta Performance em Aplicações WebAlta Performance em Aplicações Web
Alta Performance em Aplicações WebAnderson Aguiar
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)Carlos Santos
 
Aula 01- web designer
Aula 01- web designerAula 01- web designer
Aula 01- web designerRoney Sousa
 
Desenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoDesenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoFabio Moura Pereira
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Bruno Rocha
 

Semelhante a PHP Papa-Léguas: Performance em PHP (20)

Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvem
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 
Aumente a performance de seu site
Aumente a performance de seu siteAumente a performance de seu site
Aumente a performance de seu site
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 
XPT Framework
XPT FrameworkXPT Framework
XPT Framework
 
Otimização Front-end para WordPress
Otimização Front-end para WordPressOtimização Front-end para WordPress
Otimização Front-end para WordPress
 
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchXen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneos
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Dicas para otimizar o WordPress por Felipe Figueiredo
Dicas para otimizar o WordPress por Felipe FigueiredoDicas para otimizar o WordPress por Felipe Figueiredo
Dicas para otimizar o WordPress por Felipe Figueiredo
 
TechEd_OFC305
TechEd_OFC305TechEd_OFC305
TechEd_OFC305
 
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesPrecisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicações
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud Platform
 
Alta Performance em Aplicações Web
Alta Performance em Aplicações WebAlta Performance em Aplicações Web
Alta Performance em Aplicações Web
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
 
Aula 01- web designer
Aula 01- web designerAula 01- web designer
Aula 01- web designer
 
Desenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoDesenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - Introdução
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
 

Mais de Flávio Lisboa

Criando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPCriando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPFlávio Lisboa
 
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaCooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaFlávio Lisboa
 
Aprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasAprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasFlávio Lisboa
 
Ciência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoCiência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoFlávio Lisboa
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHPFlávio Lisboa
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework LaminasFlávio Lisboa
 
PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?Flávio Lisboa
 
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Flávio Lisboa
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
 
Como se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoComo se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoFlávio Lisboa
 
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPA demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPFlávio Lisboa
 
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamComunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamFlávio Lisboa
 
Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosFlávio Lisboa
 
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosEstudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosFlávio Lisboa
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosFlávio Lisboa
 
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasSemeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasFlávio Lisboa
 
O que é programação de computadores
O que é programação de computadoresO que é programação de computadores
O que é programação de computadoresFlávio Lisboa
 
Economia em rede (comunidade)
Economia em rede (comunidade)Economia em rede (comunidade)
Economia em rede (comunidade)Flávio Lisboa
 
Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Flávio Lisboa
 

Mais de Flávio Lisboa (20)

Criando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPCriando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHP
 
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaCooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
 
Aprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasAprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com Laminas
 
Ciência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoCiência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com método
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHP
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework Laminas
 
PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?
 
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
Como se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoComo se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundo
 
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPA demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
 
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamComunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
 
Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dados
 
Amanhecer esmeralda
Amanhecer esmeraldaAmanhecer esmeralda
Amanhecer esmeralda
 
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosEstudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviços
 
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasSemeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
 
O que é programação de computadores
O que é programação de computadoresO que é programação de computadores
O que é programação de computadores
 
Economia em rede (comunidade)
Economia em rede (comunidade)Economia em rede (comunidade)
Economia em rede (comunidade)
 
Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)
 

PHP Papa-Léguas: Performance em PHP

  • 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ê o guincho que não chega?
  • 5. Viagem Conceitual Um momento para estabelecer um ponto de intersecçã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?
  • 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
  • 14. privado de blindagem em relação à cabine do piloto e ao tanque de combustível
  • 16. Ataque Doolitle - 1942 Primeiro ataque aéreo dos Estados Unidos à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 - 1942 Todos os aviões caíram após o ataque. De 80 tripulantes: ●3 morreram no ataque ●8 foram capturados, sendo que 3 morreram executados e 1 por doença ●O resto se refugiou na China.
  • 19. O equilíbrio entre performance e 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 os proprietários do site, mas para todos os usuários da Internet. Sites mais rápido fazem usuários felizes e nós temos visto em nossos estudos internos que quando um site responde lentamente, visitantes gastam menos tempo lá. Mas os sites mais rápidos não apenas melhoram a experiência do usuário; dados recentes mostram que a velocidade do site também melhorar reduz os custos operacionais. Como nós, nossos usuários dão muito valor à velocidade - é por isso que nós decidimos levar em conta a velocidade do site em rankings de pesquisa. Usamos uma variedade de fontes para determinar a velocidade de um site em relação a outros 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 Performance 2ª: Utilize uma rede de entrega de conteúdo (CDN)
  • 29. Regras Yahoo! para Alta Performance Como funciona? A escolha do servidor que irá entregar conteúdo para um usuário específico normalmente é baseada em uma medida de proximidade de rede. Por exemplo, o servidor com o menor número de pontos de transição de rede ou o servidor com menor tempo de resposta.
  • 30. Regras Yahoo! para Alta Performance 3ª Use GZip Desde HTTP/1.1, os clientes Web indicam suporte para a compressão com o cabeçalho Accept-Encoding na solicitação HTTP.        Accept­Encoding: gzip, deflate Se o servidor web vê este cabeçalho na requisição, pode comprimir a resposta usando um dos métodos listados pelo cliente. O servidor web notifica o cliente web sobre isso via cabeçalho Content-Encoding na resposta.        Content­Encoding: gzip
  • 31. Regras Yahoo! para Alta Performance 4ª Coloque as folhas de estilo no cabeçalho da página Porque?  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 Performance 5ª (Polêmica) Coloque os scripts no final da pá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 Performance 6ª 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 Performance 6ª 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 Performance 7ª Coloque Javascript e CSS em arquivos externos  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 Performance 8ª 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 Performance 9ª 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 Performance 10ª 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 Performance 11ª 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 Performance 12ª 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 Performance 13ª 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 Performance 15ª 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 Performance 16 ª e 17ª Componentes Précarregados e Pós carregados  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 Performance 18 ª 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 Performance 19 ª 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 Performance 20 ª 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 Performance 21 ª 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 Performance 22 ª 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 Performance 23ª 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 Performance 24ª 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 Performance 25ª Desenvolva manipuladores de evento inteligentes  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 Performance 26ª 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 Performance 28ª Otimize as imagens 29ª Otimize a forma como o CSS dispõe as imagens 30ª 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 Performance 31ª 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 um documento multi-partes.  Isso permite que vários arquivos sejam recuperados com uma única requisição HTTP.
  • 55. Regras Yahoo! para Alta Performance 34ª 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?
  • 57. os em lL ue an M By 2 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 foi lançado no ano de 2000. Quando um script PHP é executado pela primeira vez, o código- fonte PHP é compilado pelo motor Zend em representações binárias chamadas opcodes. Estes opcodes são armazenados na área de memória compartilhada do servidor. Em seguida, são executados.” ML Então, PHP é uma linguagem compilada como Java, C # e outras. Caso contrário, seria bastante lento.
  • 59.
  • 60. E ainda tem mais! Você pode usar ofuscadores para gravar opcodes compilados em arquivos e distribuir a aplicação sem o código-fonte.
  • 61. E ainda mais rápido! Você pode compilar o PHP gerando código nativo da máquina onde será executado.  Roadsend PHP (GPL)  PHC PHP Open Source compiler  HipHop for PHP (PHP/Zend)
  • 62. PHP não é bom para web sites ou aplicações escaláveis de alto desempenho “...desempenho e escalabilidade não são uma questão de linguagem, mas sim uma questão de arquitetura de aplicação”. “A maioria das aplicações Web não fazem uso intensivo da CPU. Por exemplo, uma das atividades que as aplicações Web gastam a maior parte do tempo é o acesso a bancos de dados”. ML
  • 63. Arquitetura  PHP é como tijolinhos da LEGO.  Tijolinhos da LEGO permitem que você construa qualquer coisa.
  • 64. Arquitetura  Mas PHP não é um brinquedo.  Nós o usamos para construir “prédios” de verdade.
  • 65. Não faça de qualquer jeito
  • 68. 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
  • 69. 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.
  • 70. 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.
  • 71. Otimize o banco de dados
  • 72. 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
  • 73. 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.
  • 75. Você utiliza metodologias ágeis para desenvolver? Uma das orientações de um processo de desenvolvimento ágil e ter entregas curtas. Você não espera até o sistema inteiro estar pronto para entregá-lo (e se frustrar com as negativas do cliente). Isso é bom porque além de verificar constantemente os requisitos, também mostra para o cliente que o trabalho está sendo realizado, e em que estágio se encontra.
  • 76. Mas o que isso tem a ver com desempenho? Você quer que o usuário fique frustrado e furioso na expectativa de que a página em branco seja substituída por alguma informação, ou quer deixá-lo mais tranquilo, mostrando que a página será montada?
  • 77. 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.