SlideShare una empresa de Scribd logo
1 de 49
PHP Summer School
PHP Summer School




 Desenvolvimento Orientado à Performance
                      Nuno Loureiro <nuno@co.sapo.pt>
                             http://blog.sig9.net/
                                 20/07/2007




Nuno Loureiro <nuno@co.sapo.pt>                         20/07/2007
PHP Summer School
 About me

 •   Licenciatura em Eng. Sistemas e Computação
 •   Começou a usar Linux em 1995

 •   Começou a programar PHP em 1999
 •   Organizou o 1º Simpósio de Linux em 1999 - Simplinux

 •   Sócio-fundador da ETH em 1999
 •   Autor do artigo “Programming PHP with Security in Mind” na Linux Journal 10/2002

 •   Juntou-se à equipa do SAPO em 2002
       •      Programador do Webmail do SAPO

       •      Gestor técnico da plataforma de email do SAPO
 •   Zend Certified Engineer em 2005

Performance                                                                             2
PHP Summer School
Sumário - parte I


      •       Arquitectura
               •   Performance e Escalabilidade
               •   Conteúdo Estático vs Dinâmico
               •   Webserver
               •   Compressão de Conteúdo
               •   Optimizações de Compilador
               •   Tuning php.ini
               •   Compiler/Opcode Caching
               •   Bottlenecks
               •   Session Storage
               •   Benchmarking



Performance                                                       3
PHP Summer School
 Sumário - parte II


         •    PHP
                  •   Profiling
                  •   Caching
                  •   Opções de código a considerar
                  •   Regra 80/20

         •    Bases de Dados
              •   O que evitar e o que usar




Performance                                                          4
PHP Summer School
 Arquitectura
 Performance e Escalabilidade

   • Performance != velocidade de execução
   • Performance = compromisso entre velocidade e escalabilidade




Performance                                                        5
PHP Summer School
 Arquitectura
 Performance e Escalabilidade
Exemplo:
              Script que leia um ficheiro binário de 5Mb e escreva outro ficheiro
              com o conteúdo do primeiro mas codificado em base64




Performance                                                                         6
PHP Summer School
 Arquitectura
 Performance e Escalabilidade
Exemplo:
              Script que leia um ficheiro binário de 5Mb e escreva outro ficheiro
              com o conteúdo do primeiro mas codificado em base64

  Exemplo A.php: implementação tendo em conta a velocidade
  Exemplo B.php: implementação tendo em conta a escalabilidade

      A.php                                          B.php




Performance                                                                         6
PHP Summer School
 Arquitectura
 Performance e Escalabilidade




Performance                                    7
PHP Summer School
 Arquitectura
 Performance e Escalabilidade
    • A.php: Leitura única do ficheiro => Mais rápido
    • B.php: Múltiplas leituras do ficheiro => Mais lento




         A.php                                      B.php




Performance                                                          7
PHP Summer School
 Arquitectura
 Performance e Escalabilidade
    • A.php: Leitura única do ficheiro => Mais rápido
    • B.php: Múltiplas leituras do ficheiro => Mais lento
    No entanto,
    • A.php: Leitura única do ficheiro => Mais memória usada (~=2x5Mb)
    • B.php: Múltiplas leituras do ficheiro => Pouca memória usada




         A.php                                      B.php




Performance                                                             7
PHP Summer School
 Arquitectura
 Performance e Escalabilidade
    • A.php: Leitura única do ficheiro => Mais rápido
    • B.php: Múltiplas leituras do ficheiro => Mais lento
    No entanto,
    • A.php: Leitura única do ficheiro => Mais memória usada (~=2x5Mb)
    • B.php: Múltiplas leituras do ficheiro => Pouca memória usada
    Com 100 instâncias em paralelo,
    • A.php: Ocupa cerca de 1Gb RAM => Usa Swap => LENTO!
    • B.php: Consumo de memória praticamente não cresce => Impacto na performance
              pouco significativo => MAIS RAPIDO!

         A.php                                      B.php




Performance                                                                         7
PHP Summer School
 Arquitectura
 Conteúdo Estático vs Dinâmico




Performance                                     8
PHP Summer School
 Arquitectura
 Conteúdo Estático vs Dinâmico
   Conteúdo Estático:                               Conteúdo Dinâmico:
  •                                             •
       Não envolve processamento extra               Envolve processamento extra
  •                                             •
       Servido directamente pelo servidor Web        Servidor Web => Engine que interpreta o script
  •                                             •
       Mais leve e rápido                            Mais lento que conteúdo estático
  •                                             •
       exemplos: imagens, HTML, Javascript           exemplos: PHP Perl, Python, Ruby
                                                                    ,




Performance                                                                                      8
PHP Summer School
 Arquitectura
 Conteúdo Estático vs Dinâmico
   Conteúdo Estático:                                    Conteúdo Dinâmico:
  •                                                  •
        Não envolve processamento extra                   Envolve processamento extra
  •                                                  •
        Servido directamente pelo servidor Web            Servidor Web => Engine que interpreta o script
  •                                                  •
        Mais leve e rápido                                Mais lento que conteúdo estático
  •                                                  •
        exemplos: imagens, HTML, Javascript               exemplos: PHP Perl, Python, Ruby
                                                                         ,

      Para obter máxima Performance/Escalabilidade:
  •    Usar sempre que possível conteúdo estático (pre-executar os scripts e servir sempre o
       conteúdo estático resultante)
  •    Quando não é possível usar apenas conteúdo estático, dividir página em componentes e
       tornar estático os componentes que podem ser estáticos. (Ex: Portal com blocos de notícias)
  •    Mas, nem sempre precisamos deste tipo de solução. Existem também outras alternativas
       tipo cache.




Performance                                                                                           8
PHP Summer School
 Arquitectura
 Conteúdo Estático vs Dinâmico
   Conteúdo Estático:                                    Conteúdo Dinâmico:
  •                                                  •
        Não envolve processamento extra                   Envolve processamento extra
  •                                                  •
        Servido directamente pelo servidor Web            Servidor Web => Engine que interpreta o script
  •                                                  •
        Mais leve e rápido                                Mais lento que conteúdo estático
  •                                                  •
        exemplos: imagens, HTML, Javascript               exemplos: PHP Perl, Python, Ruby
                                                                         ,

      Para obter máxima Performance/Escalabilidade:
  •    Usar sempre que possível conteúdo estático (pre-executar os scripts e servir sempre o
       conteúdo estático resultante)
  •    Quando não é possível usar apenas conteúdo estático, dividir página em componentes e
       tornar estático os componentes que podem ser estáticos. (Ex: Portal com blocos de notícias)
  •    Mas, nem sempre precisamos deste tipo de solução. Existem também outras alternativas
       tipo cache.

           Dica: devido às limitações de pipelining dos browsers
           usar um domínio diferente para servir conteúdo estático

Performance                                                                                           8
PHP Summer School
 Arquitectura
 Webserver




Performance                    9
PHP Summer School
 Arquitectura
 Webserver
Arquitectura mais comum:

              Apache

              PHP
      Apache + mod_php


• “A” da arquitectura LAMP
• Popular por algum motivo
• PHP está embutido no Apache
• Processos Apache ocupam mais RAM
• Se o Apache estiver a servir muitos
clientes lentos vai ter muita memória
ocupada inutilmente



Performance                                            9
PHP Summer School
 Arquitectura
 Webserver
Arquitectura mais comum:                A ganhar bastante popularidade:
                                                      Lighttpd
              Apache

              PHP                                        PHP
      Apache + mod_php                             Lighttpd + php fcgi


• “A” da arquitectura LAMP              •  Rápido que se farta para conteúdo
• Popular por algum motivo              estático.
• PHP está embutido no Apache           • Separa as águas:
• Processos Apache ocupam mais RAM      • Servidor HTTP + Servidor PHP
• Se o Apache estiver a servir muitos   • Podemos criar um cluster de
clientes lentos vai ter muita memória   servidores HTTP e outro para correr
ocupada inutilmente                     apenas PHP
                                        • Se o Lighttpd estiver a servir muitos
                                        clientes lentos, não há problema

Performance                                                                  9
PHP Summer School
 Arquitectura
 Webserver
 Exemplo de uma Arquitectura escalável:




Performance                                              10
PHP Summer School
 Arquitectura
 Webserver
 Dicas:
 • Compilar apenas com os módulos necessários
 • Desligar tudo o que não é necessário:
      • Logs => I/O
      • Se precisar de Logs:
              • não converter IPs em Hostnames
              • rodar os Logs
      • Status/ExtendStatus
 • Evitar tudo o que provoque mais do que um stat() por request
     • Exemplos no Apache:
              • Manter a lista do “DirectoryIndex” o mais pequena possível
              • Desactivar o uso de .htaccess com “AllowOverride none”

Performance                                                                  11
PHP Summer School
Arquitectura
Compressão de Conteúdo




Performance                             12
PHP Summer School
Arquitectura
Compressão de Conteúdo




         Compressão de Conteúdo
              •   A maioria dos Browsers suporta
              •   Páginas comprimidas são em média 7-10x mais pequenas
              •   Implementações:
                  •   Apache 1 (mod_gzip / mod_deflate)
                  •   Apache 2 (mod_deflate)
                  •   Lighttpd (mod_compress)
                  •   PHP:
                       •     php.ini: zlib.output compression=1
                       •     no script: ob_start(“ob_gzhandler”)

Performance                                                                   12
PHP Summer School
Arquitectura
Compressão de Conteúdo
Menos output ...
  •    usa menos largura de banda
  •    poupa €€€
  •    as páginas carregam mais rapidamente
  •    reduz IO de rede em sites com muito tráfego




         Compressão de Conteúdo
              •   A maioria dos Browsers suporta
              •   Páginas comprimidas são em média 7-10x mais pequenas
              •   Implementações:
                  •   Apache 1 (mod_gzip / mod_deflate)
                  •   Apache 2 (mod_deflate)
                  •   Lighttpd (mod_compress)
                  •   PHP:
                       •     php.ini: zlib.output compression=1
                       •     no script: ob_start(“ob_gzhandler”)

Performance                                                                   12
PHP Summer School
Arquitectura
Optimizações de Compilador

    Para máxima performance é crucial que todo o software seja
   compilado de forma a usar o máximo do hardware disponível

    • Activar todas as optimizações de compilador com o -O3
    • Optimizar o código para o CPU usado via -march -mcpu
    • Funcionalidades específicas do CPU via -msse -mmmx
    -mfpmath=sse
    • Desactivar dados para debug via -fomit-frame-pointer




Performance                                                      13
PHP Summer School
 Arquitectura
 Tuning php.ini

     • Settings aconselhados ** php.ini:
                                 no
        • register_globals = Off
              •   register_long_arrays = Off
              •   magic_quotes_gpc = Off
              •   variables_order = “GPCS”
              •   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
              •   output_buffering = 4096



                                                           ** Desligado por default
Performance                                                                    14
PHP Summer School
 Arquitectura
Compiler/Opcode Caching




Performance                              15
PHP Summer School
 Arquitectura
Compiler/Opcode Caching
                          • O ciclo a branco acontece para cada ficheiro
                          incluído e não apenas para o ficheiro principal
                          • A compilação facilmente consome mais
                          tempo do que a execução.




Performance                                                           15
PHP Summer School
 Arquitectura
Compiler/Opcode Caching
                          • O ciclo a branco acontece para cada ficheiro
                          incluído e não apenas para o ficheiro principal
                          • A compilação facilmente consome mais
                          tempo do que a execução.



                           Compiler/Opcode Caching

                          • Cada script PHP é compilado apenas uma
                          única vez para cada revision.
                          • Reduz IO de ficheiros, os opcodes são lidos
                          da memória em vez de serem “parsed” do
                          disco.
                          • Os opcodes são optimizados para uma
                          execução mais rápida.
Performance                                                           15
PHP Summer School
 Arquitectura
Compiler/Opcode Caching
Opções mais populares para Opcode Cache:
 • Alternative PHP Cache (APC) - http://pecl.php.net/package/APC
         • pear install pecl.php.net/apc
         • Adicionar “extension=apc.so” no php.ini

   • XCache - http://xcache.lighttpd.net/wiki/GettingSource

   • Zend Platform - http://www.zend.com/




Performance                                                             16
PHP Summer School
 Arquitectura
 Bottlenecks


      •       Bottlenecks típicos de uma Arquitectura:
               •   IO de Disco
                   •  Evitar logs ou gravar em disco diferente
                   •  Drive T uning (hdparm / RAID)
                   •  Usar RAM Disk para sessões ou para as sources
                         # Speed Up /tmp Directory
                         mount --bind -ttmpfs /tmp /tmp

                         # Accelerate Scripts Directory
                         mount --bind -ttmpfs /home/webroot /home/webroot


               •   IO de Rede
                   •  Usar compressão de conteúdo
                   •  Separar Redes e usar mais interfaces de rede


Performance                                                                 17
PHP Summer School
 Arquitectura
 Session Storage
   Para um único servidor:
      •   Por default cada sessão de PHP é guardada em disco num ficheiro
          separado
              •   Muitos ficheiros num directório reduz a velocidade de acesso
                  • Separar as sessões em múltiplos directórios
                      •   session.save_path = quot;N;/pathquot;


      •   Usar sessões em memória (via Ramdisk, shared memory)

   Para um cluster de servidores:
      •   Usar Memcache
      •   Usar o Session Clustering do Zend Platform
      •   Fazer stickyness por servidor e usar método convencional para sessões

Performance                                                                       18
PHP Summer School
Arquitectura
 Benchmarking
Opções mais populares para Benchmarking de conteúdo:
      Apache Benchmark - http://www.apache.org/


                                                            httperf
                                             http://freshmeat.net/projects/httperf/




                                                          http_load
                                           http://www.acme.com/software/http_load/




Performance                                                                           19
PHP Summer School
 Sumário - parte II


         •    PHP
                  •   Profiling
                  •   Caching
                  •   Opções de código a considerar
                  •   Regra 80/20

         •    Bases de Dados
              •   O que evitar e o que usar




Performance                                                          20
PHP Summer School
 PHP
 Profiling
  •   PHP Debugger (APD) - http://pecl.php.net/package/apd




  •    Zend Platform / Zend Studio - http://www.zend.com/
  •    XDebug - http://xdebug.org/
         •    kcachegrind




Performance                                                         21
PHP Summer School
 PHP
 Profiling
              PEAR Benchmark_Profiler

                 Result




                  Métodos mais úteis da class Pear::Benchmark_Profiler:
                  •start()
                  •stop()
                  •enterSection()
                  •leaveSection()
                  •display()
                  •getAllSectionsInformations()




Performance                                                          22
PHP Summer School
 PHP
 Caching




Performance                  23
PHP Summer School
 PHP
 Caching
 O que é?
       •      Caching é o reconhecimento do facto que a maioria dos
              dados dinâmicos não mudam cada vez que os pedem




Performance                                                           23
PHP Summer School
 PHP
 Caching
 O que é?
       •      Caching é o reconhecimento do facto que a maioria dos
              dados dinâmicos não mudam cada vez que os pedem

Como funciona?




Performance                                                           23
PHP Summer School
 PHP
 Caching
 O que é?
       •      Caching é o reconhecimento do facto que a maioria dos
              dados dinâmicos não mudam cada vez que os pedem

Como funciona?

Vantagens?
 •    Grande aumento de performance
 •    Diminuição na utilização de recursos




Performance                                                           23
PHP Summer School
 PHP
 Caching
 O que é?
       •      Caching é o reconhecimento do facto que a maioria dos
              dados dinâmicos não mudam cada vez que os pedem

Como funciona?

Vantagens?
 •    Grande aumento de performance
 •    Diminuição na utilização de recursos


Desvantagens?
 •   Complexidade da Arquitectura
 •   Potencial para dados inconsistentes


Performance                                                           23
PHP Summer School
 PHP
 Caching
   Tipos de cache:
        •      Full Content Caching
        •      Partial Content Caching
        •      After Caching
        •      Permanent Caching
        •      HTP Header Caching


  Implementações de cache:
       •      Zend Platform (parcial, total)
       •      PEAR::Cache_Lite




Performance                                                   24
PHP Summer School
Opções de código a considerar




                      Profiling Results:




                                    Como posso optimizar o script?




Performance                                                      25
PHP Summer School
 PHP
Opções de código a considerar
 • Evitar usar Regular Expressions
        •   preg_match() => strpos()
        •   preg_replace() => str_replace() ou strstr()
  • Usar echo em vez de print
  • Usar pelicas em vez de aspas
  • Usar ciclos while() em vez de for()      e não usar funções nas condições




Performance                                                                     26
PHP Summer School
 PHP
Opções de código a considerar
• Para Arrays Associativos usar foreach() em vez de while(list()=   each())




Performance                                                                   27
PHP Summer School
Opções de código a considerar




                      Profiling Results:




                                    Agora que já sabem, optimizem!




Performance                                                     28
PHP Summer School
 PHP
Opções de código a considerar



                  Profiling Results:




                                      Ganho de 17.3%
                               em relação ao primeiro exemplo




Performance                                                     29
PHP Summer School
 PHP
 80/20 rule



              80% do teu código demora menos de
              20% do tempo total de execução

                •   Não percas tempo a optimizar nada nos 80%

                •   Descobre o que são os 20% a optimizar e optimiza




Performance                                                            30
PHP Summer School
Bases de Dados
O que evitar e o que usar



          •   Evitar:
              •   usar joins
              •   fazer um query por todos os campos para obter apenas um


          •   Usar:
              •   Ferramentas para analisar a execução de queries
              •   indexes nos campos apropriados




Performance                                                                 31
PHP Summer School
PHP Summer School




                                  FIM!
                           Obrigado, perguntas?
                      Nuno Loureiro <nuno@co.sapo.pt>
                             http://blog.sig9.net/
                                 20/07/2007




Nuno Loureiro <nuno@co.sapo.pt>                         20/07/2007

Más contenido relacionado

La actualidad más candente

Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
elliando dias
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsCakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no Windows
Emerson Soares
 
Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Cache e Performance (in portuguese)
Cache e Performance (in portuguese)
Bruno Pedro
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnica
Silvio Dias
 

La actualidad más candente (19)

Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsCakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no Windows
 
Infraestrutura em nuvem com Amazon Web Services (AWS)
Infraestrutura em nuvem com Amazon Web Services (AWS)Infraestrutura em nuvem com Amazon Web Services (AWS)
Infraestrutura em nuvem com Amazon Web Services (AWS)
 
Instalação CakePHP 2.2.3
Instalação CakePHP 2.2.3Instalação CakePHP 2.2.3
Instalação CakePHP 2.2.3
 
Cake PHP
Cake PHPCake PHP
Cake PHP
 
Ebook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPressEbook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPress
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
 
WordCamp Floripa 2021 - Daniel - Core web vitals e WordPress
WordCamp Floripa 2021 - Daniel  - Core web vitals e WordPressWordCamp Floripa 2021 - Daniel  - Core web vitals e WordPress
WordCamp Floripa 2021 - Daniel - Core web vitals e WordPress
 
PHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPPHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHP
 
Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Cache e Performance (in portuguese)
Cache e Performance (in portuguese)
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
Aceleracao+conteudo+dinamico
Aceleracao+conteudo+dinamicoAceleracao+conteudo+dinamico
Aceleracao+conteudo+dinamico
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnica
 
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
 
Tecnologias Web 2.0
Tecnologias Web 2.0 Tecnologias Web 2.0
Tecnologias Web 2.0
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Curso asp - basico
Curso   asp - basicoCurso   asp - basico
Curso asp - basico
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 

Destacado

Rohas nagpal _it_act_2000_vs_2008 - ClubHack2009
Rohas nagpal _it_act_2000_vs_2008 - ClubHack2009Rohas nagpal _it_act_2000_vs_2008 - ClubHack2009
Rohas nagpal _it_act_2000_vs_2008 - ClubHack2009
ClubHack
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
zachwise
 

Destacado (20)

It's no Secret
It's no SecretIt's no Secret
It's no Secret
 
Rohas nagpal _it_act_2000_vs_2008 - ClubHack2009
Rohas nagpal _it_act_2000_vs_2008 - ClubHack2009Rohas nagpal _it_act_2000_vs_2008 - ClubHack2009
Rohas nagpal _it_act_2000_vs_2008 - ClubHack2009
 
Android attacks
Android attacksAndroid attacks
Android attacks
 
JavaScript 101
JavaScript 101JavaScript 101
JavaScript 101
 
IPv6
IPv6IPv6
IPv6
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
 
C days2015
C days2015C days2015
C days2015
 
Living With Passwords: Personal Password Management
Living With Passwords: Personal Password ManagementLiving With Passwords: Personal Password Management
Living With Passwords: Personal Password Management
 
Introduction to blockchain and crypto currencies
Introduction to blockchain and crypto currenciesIntroduction to blockchain and crypto currencies
Introduction to blockchain and crypto currencies
 
The Challenge of todays CMO
The Challenge of todays CMOThe Challenge of todays CMO
The Challenge of todays CMO
 
XSS - Attacks & Defense
XSS - Attacks & DefenseXSS - Attacks & Defense
XSS - Attacks & Defense
 
JS Event Model
JS Event ModelJS Event Model
JS Event Model
 
JavaScript intro
JavaScript introJavaScript intro
JavaScript intro
 
Website design workflow
Website design workflowWebsite design workflow
Website design workflow
 
Cyber999 Brochure
Cyber999 BrochureCyber999 Brochure
Cyber999 Brochure
 
Mobile Application Scan and Testing
Mobile Application Scan and TestingMobile Application Scan and Testing
Mobile Application Scan and Testing
 
Protecting Your Web Site From SQL Injection & XSS
Protecting Your Web SiteFrom SQL Injection & XSSProtecting Your Web SiteFrom SQL Injection & XSS
Protecting Your Web Site From SQL Injection & XSS
 
De dialoog aangaan in een massamarkt
De dialoog aangaan in een massamarktDe dialoog aangaan in een massamarkt
De dialoog aangaan in een massamarkt
 
Advanced SQL Injection: Attacks
Advanced SQL Injection: Attacks Advanced SQL Injection: Attacks
Advanced SQL Injection: Attacks
 
Hackathon Tips and Tricks
Hackathon Tips and TricksHackathon Tips and Tricks
Hackathon Tips and Tricks
 

Similar a Performance (Web&PHP)

4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdf4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdf
RubenManhia
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
Carlos Santos
 
PHP e componentes reutilizáveis
PHP e componentes reutilizáveisPHP e componentes reutilizáveis
PHP e componentes reutilizáveis
elliando dias
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS
 
PHP - Capítulo 01
PHP - Capítulo 01PHP - Capítulo 01
PHP - Capítulo 01
fdorado
 
CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro bolo
elliando dias
 

Similar a Performance (Web&PHP) (20)

Técnicas para ser escalável com PHP
Técnicas para ser escalável com PHPTécnicas para ser escalável com PHP
Técnicas para ser escalável com PHP
 
4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdf4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdf
 
Web Services (in portuguese)
Web Services (in portuguese)Web Services (in portuguese)
Web Services (in portuguese)
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+Apache
 
WordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net CoreWordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
 
Ruby On Rails - Porque Utilizar?
Ruby On Rails - Porque Utilizar?Ruby On Rails - Porque Utilizar?
Ruby On Rails - Porque Utilizar?
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Desenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisDesenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveis
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011
 
Web seminario varnish
Web seminario varnishWeb seminario varnish
Web seminario varnish
 
PHP e componentes reutilizáveis
PHP e componentes reutilizáveisPHP e componentes reutilizáveis
PHP e componentes reutilizáveis
 
PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
PHP - Capítulo 01
PHP - Capítulo 01PHP - Capítulo 01
PHP - Capítulo 01
 
Php
PhpPhp
Php
 
CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro bolo
 
Apostila php
Apostila phpApostila php
Apostila php
 

Último

Último (9)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

Performance (Web&PHP)

  • 1. PHP Summer School PHP Summer School Desenvolvimento Orientado à Performance Nuno Loureiro <nuno@co.sapo.pt> http://blog.sig9.net/ 20/07/2007 Nuno Loureiro <nuno@co.sapo.pt> 20/07/2007
  • 2. PHP Summer School About me • Licenciatura em Eng. Sistemas e Computação • Começou a usar Linux em 1995 • Começou a programar PHP em 1999 • Organizou o 1º Simpósio de Linux em 1999 - Simplinux • Sócio-fundador da ETH em 1999 • Autor do artigo “Programming PHP with Security in Mind” na Linux Journal 10/2002 • Juntou-se à equipa do SAPO em 2002 • Programador do Webmail do SAPO • Gestor técnico da plataforma de email do SAPO • Zend Certified Engineer em 2005 Performance 2
  • 3. PHP Summer School Sumário - parte I • Arquitectura • Performance e Escalabilidade • Conteúdo Estático vs Dinâmico • Webserver • Compressão de Conteúdo • Optimizações de Compilador • Tuning php.ini • Compiler/Opcode Caching • Bottlenecks • Session Storage • Benchmarking Performance 3
  • 4. PHP Summer School Sumário - parte II • PHP • Profiling • Caching • Opções de código a considerar • Regra 80/20 • Bases de Dados • O que evitar e o que usar Performance 4
  • 5. PHP Summer School Arquitectura Performance e Escalabilidade • Performance != velocidade de execução • Performance = compromisso entre velocidade e escalabilidade Performance 5
  • 6. PHP Summer School Arquitectura Performance e Escalabilidade Exemplo: Script que leia um ficheiro binário de 5Mb e escreva outro ficheiro com o conteúdo do primeiro mas codificado em base64 Performance 6
  • 7. PHP Summer School Arquitectura Performance e Escalabilidade Exemplo: Script que leia um ficheiro binário de 5Mb e escreva outro ficheiro com o conteúdo do primeiro mas codificado em base64 Exemplo A.php: implementação tendo em conta a velocidade Exemplo B.php: implementação tendo em conta a escalabilidade A.php B.php Performance 6
  • 8. PHP Summer School Arquitectura Performance e Escalabilidade Performance 7
  • 9. PHP Summer School Arquitectura Performance e Escalabilidade • A.php: Leitura única do ficheiro => Mais rápido • B.php: Múltiplas leituras do ficheiro => Mais lento A.php B.php Performance 7
  • 10. PHP Summer School Arquitectura Performance e Escalabilidade • A.php: Leitura única do ficheiro => Mais rápido • B.php: Múltiplas leituras do ficheiro => Mais lento No entanto, • A.php: Leitura única do ficheiro => Mais memória usada (~=2x5Mb) • B.php: Múltiplas leituras do ficheiro => Pouca memória usada A.php B.php Performance 7
  • 11. PHP Summer School Arquitectura Performance e Escalabilidade • A.php: Leitura única do ficheiro => Mais rápido • B.php: Múltiplas leituras do ficheiro => Mais lento No entanto, • A.php: Leitura única do ficheiro => Mais memória usada (~=2x5Mb) • B.php: Múltiplas leituras do ficheiro => Pouca memória usada Com 100 instâncias em paralelo, • A.php: Ocupa cerca de 1Gb RAM => Usa Swap => LENTO! • B.php: Consumo de memória praticamente não cresce => Impacto na performance pouco significativo => MAIS RAPIDO! A.php B.php Performance 7
  • 12. PHP Summer School Arquitectura Conteúdo Estático vs Dinâmico Performance 8
  • 13. PHP Summer School Arquitectura Conteúdo Estático vs Dinâmico Conteúdo Estático: Conteúdo Dinâmico: • • Não envolve processamento extra Envolve processamento extra • • Servido directamente pelo servidor Web Servidor Web => Engine que interpreta o script • • Mais leve e rápido Mais lento que conteúdo estático • • exemplos: imagens, HTML, Javascript exemplos: PHP Perl, Python, Ruby , Performance 8
  • 14. PHP Summer School Arquitectura Conteúdo Estático vs Dinâmico Conteúdo Estático: Conteúdo Dinâmico: • • Não envolve processamento extra Envolve processamento extra • • Servido directamente pelo servidor Web Servidor Web => Engine que interpreta o script • • Mais leve e rápido Mais lento que conteúdo estático • • exemplos: imagens, HTML, Javascript exemplos: PHP Perl, Python, Ruby , Para obter máxima Performance/Escalabilidade: • Usar sempre que possível conteúdo estático (pre-executar os scripts e servir sempre o conteúdo estático resultante) • Quando não é possível usar apenas conteúdo estático, dividir página em componentes e tornar estático os componentes que podem ser estáticos. (Ex: Portal com blocos de notícias) • Mas, nem sempre precisamos deste tipo de solução. Existem também outras alternativas tipo cache. Performance 8
  • 15. PHP Summer School Arquitectura Conteúdo Estático vs Dinâmico Conteúdo Estático: Conteúdo Dinâmico: • • Não envolve processamento extra Envolve processamento extra • • Servido directamente pelo servidor Web Servidor Web => Engine que interpreta o script • • Mais leve e rápido Mais lento que conteúdo estático • • exemplos: imagens, HTML, Javascript exemplos: PHP Perl, Python, Ruby , Para obter máxima Performance/Escalabilidade: • Usar sempre que possível conteúdo estático (pre-executar os scripts e servir sempre o conteúdo estático resultante) • Quando não é possível usar apenas conteúdo estático, dividir página em componentes e tornar estático os componentes que podem ser estáticos. (Ex: Portal com blocos de notícias) • Mas, nem sempre precisamos deste tipo de solução. Existem também outras alternativas tipo cache. Dica: devido às limitações de pipelining dos browsers usar um domínio diferente para servir conteúdo estático Performance 8
  • 16. PHP Summer School Arquitectura Webserver Performance 9
  • 17. PHP Summer School Arquitectura Webserver Arquitectura mais comum: Apache PHP Apache + mod_php • “A” da arquitectura LAMP • Popular por algum motivo • PHP está embutido no Apache • Processos Apache ocupam mais RAM • Se o Apache estiver a servir muitos clientes lentos vai ter muita memória ocupada inutilmente Performance 9
  • 18. PHP Summer School Arquitectura Webserver Arquitectura mais comum: A ganhar bastante popularidade: Lighttpd Apache PHP PHP Apache + mod_php Lighttpd + php fcgi • “A” da arquitectura LAMP • Rápido que se farta para conteúdo • Popular por algum motivo estático. • PHP está embutido no Apache • Separa as águas: • Processos Apache ocupam mais RAM • Servidor HTTP + Servidor PHP • Se o Apache estiver a servir muitos • Podemos criar um cluster de clientes lentos vai ter muita memória servidores HTTP e outro para correr ocupada inutilmente apenas PHP • Se o Lighttpd estiver a servir muitos clientes lentos, não há problema Performance 9
  • 19. PHP Summer School Arquitectura Webserver Exemplo de uma Arquitectura escalável: Performance 10
  • 20. PHP Summer School Arquitectura Webserver Dicas: • Compilar apenas com os módulos necessários • Desligar tudo o que não é necessário: • Logs => I/O • Se precisar de Logs: • não converter IPs em Hostnames • rodar os Logs • Status/ExtendStatus • Evitar tudo o que provoque mais do que um stat() por request • Exemplos no Apache: • Manter a lista do “DirectoryIndex” o mais pequena possível • Desactivar o uso de .htaccess com “AllowOverride none” Performance 11
  • 21. PHP Summer School Arquitectura Compressão de Conteúdo Performance 12
  • 22. PHP Summer School Arquitectura Compressão de Conteúdo Compressão de Conteúdo • A maioria dos Browsers suporta • Páginas comprimidas são em média 7-10x mais pequenas • Implementações: • Apache 1 (mod_gzip / mod_deflate) • Apache 2 (mod_deflate) • Lighttpd (mod_compress) • PHP: • php.ini: zlib.output compression=1 • no script: ob_start(“ob_gzhandler”) Performance 12
  • 23. PHP Summer School Arquitectura Compressão de Conteúdo Menos output ... • usa menos largura de banda • poupa €€€ • as páginas carregam mais rapidamente • reduz IO de rede em sites com muito tráfego Compressão de Conteúdo • A maioria dos Browsers suporta • Páginas comprimidas são em média 7-10x mais pequenas • Implementações: • Apache 1 (mod_gzip / mod_deflate) • Apache 2 (mod_deflate) • Lighttpd (mod_compress) • PHP: • php.ini: zlib.output compression=1 • no script: ob_start(“ob_gzhandler”) Performance 12
  • 24. PHP Summer School Arquitectura Optimizações de Compilador Para máxima performance é crucial que todo o software seja compilado de forma a usar o máximo do hardware disponível • Activar todas as optimizações de compilador com o -O3 • Optimizar o código para o CPU usado via -march -mcpu • Funcionalidades específicas do CPU via -msse -mmmx -mfpmath=sse • Desactivar dados para debug via -fomit-frame-pointer Performance 13
  • 25. PHP Summer School Arquitectura Tuning php.ini • Settings aconselhados ** php.ini: no • register_globals = Off • register_long_arrays = Off • magic_quotes_gpc = Off • variables_order = “GPCS” • 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 • output_buffering = 4096 ** Desligado por default Performance 14
  • 26. PHP Summer School Arquitectura Compiler/Opcode Caching Performance 15
  • 27. PHP Summer School Arquitectura Compiler/Opcode Caching • O ciclo a branco acontece para cada ficheiro incluído e não apenas para o ficheiro principal • A compilação facilmente consome mais tempo do que a execução. Performance 15
  • 28. PHP Summer School Arquitectura Compiler/Opcode Caching • O ciclo a branco acontece para cada ficheiro incluído e não apenas para o ficheiro principal • A compilação facilmente consome mais tempo do que a execução. Compiler/Opcode Caching • Cada script PHP é compilado apenas uma única vez para cada revision. • Reduz IO de ficheiros, os opcodes são lidos da memória em vez de serem “parsed” do disco. • Os opcodes são optimizados para uma execução mais rápida. Performance 15
  • 29. PHP Summer School Arquitectura Compiler/Opcode Caching Opções mais populares para Opcode Cache: • Alternative PHP Cache (APC) - http://pecl.php.net/package/APC • pear install pecl.php.net/apc • Adicionar “extension=apc.so” no php.ini • XCache - http://xcache.lighttpd.net/wiki/GettingSource • Zend Platform - http://www.zend.com/ Performance 16
  • 30. PHP Summer School Arquitectura Bottlenecks • Bottlenecks típicos de uma Arquitectura: • IO de Disco • Evitar logs ou gravar em disco diferente • Drive T uning (hdparm / RAID) • Usar RAM Disk para sessões ou para as sources # Speed Up /tmp Directory mount --bind -ttmpfs /tmp /tmp # Accelerate Scripts Directory mount --bind -ttmpfs /home/webroot /home/webroot • IO de Rede • Usar compressão de conteúdo • Separar Redes e usar mais interfaces de rede Performance 17
  • 31. PHP Summer School Arquitectura Session Storage Para um único servidor: • Por default cada sessão de PHP é guardada em disco num ficheiro separado • Muitos ficheiros num directório reduz a velocidade de acesso • Separar as sessões em múltiplos directórios • session.save_path = quot;N;/pathquot; • Usar sessões em memória (via Ramdisk, shared memory) Para um cluster de servidores: • Usar Memcache • Usar o Session Clustering do Zend Platform • Fazer stickyness por servidor e usar método convencional para sessões Performance 18
  • 32. PHP Summer School Arquitectura Benchmarking Opções mais populares para Benchmarking de conteúdo: Apache Benchmark - http://www.apache.org/ httperf http://freshmeat.net/projects/httperf/ http_load http://www.acme.com/software/http_load/ Performance 19
  • 33. PHP Summer School Sumário - parte II • PHP • Profiling • Caching • Opções de código a considerar • Regra 80/20 • Bases de Dados • O que evitar e o que usar Performance 20
  • 34. PHP Summer School PHP Profiling • PHP Debugger (APD) - http://pecl.php.net/package/apd • Zend Platform / Zend Studio - http://www.zend.com/ • XDebug - http://xdebug.org/ • kcachegrind Performance 21
  • 35. PHP Summer School PHP Profiling PEAR Benchmark_Profiler Result Métodos mais úteis da class Pear::Benchmark_Profiler: •start() •stop() •enterSection() •leaveSection() •display() •getAllSectionsInformations() Performance 22
  • 36. PHP Summer School PHP Caching Performance 23
  • 37. PHP Summer School PHP Caching O que é? • Caching é o reconhecimento do facto que a maioria dos dados dinâmicos não mudam cada vez que os pedem Performance 23
  • 38. PHP Summer School PHP Caching O que é? • Caching é o reconhecimento do facto que a maioria dos dados dinâmicos não mudam cada vez que os pedem Como funciona? Performance 23
  • 39. PHP Summer School PHP Caching O que é? • Caching é o reconhecimento do facto que a maioria dos dados dinâmicos não mudam cada vez que os pedem Como funciona? Vantagens? • Grande aumento de performance • Diminuição na utilização de recursos Performance 23
  • 40. PHP Summer School PHP Caching O que é? • Caching é o reconhecimento do facto que a maioria dos dados dinâmicos não mudam cada vez que os pedem Como funciona? Vantagens? • Grande aumento de performance • Diminuição na utilização de recursos Desvantagens? • Complexidade da Arquitectura • Potencial para dados inconsistentes Performance 23
  • 41. PHP Summer School PHP Caching Tipos de cache: • Full Content Caching • Partial Content Caching • After Caching • Permanent Caching • HTP Header Caching Implementações de cache: • Zend Platform (parcial, total) • PEAR::Cache_Lite Performance 24
  • 42. PHP Summer School Opções de código a considerar Profiling Results: Como posso optimizar o script? Performance 25
  • 43. PHP Summer School PHP Opções de código a considerar • Evitar usar Regular Expressions • preg_match() => strpos() • preg_replace() => str_replace() ou strstr() • Usar echo em vez de print • Usar pelicas em vez de aspas • Usar ciclos while() em vez de for() e não usar funções nas condições Performance 26
  • 44. PHP Summer School PHP Opções de código a considerar • Para Arrays Associativos usar foreach() em vez de while(list()= each()) Performance 27
  • 45. PHP Summer School Opções de código a considerar Profiling Results: Agora que já sabem, optimizem! Performance 28
  • 46. PHP Summer School PHP Opções de código a considerar Profiling Results: Ganho de 17.3% em relação ao primeiro exemplo Performance 29
  • 47. PHP Summer School PHP 80/20 rule 80% do teu código demora menos de 20% do tempo total de execução • Não percas tempo a optimizar nada nos 80% • Descobre o que são os 20% a optimizar e optimiza Performance 30
  • 48. PHP Summer School Bases de Dados O que evitar e o que usar • Evitar: • usar joins • fazer um query por todos os campos para obter apenas um • Usar: • Ferramentas para analisar a execução de queries • indexes nos campos apropriados Performance 31
  • 49. PHP Summer School PHP Summer School FIM! Obrigado, perguntas? Nuno Loureiro <nuno@co.sapo.pt> http://blog.sig9.net/ 20/07/2007 Nuno Loureiro <nuno@co.sapo.pt> 20/07/2007