SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
Alta Performance de
          Aplicações Web
          Michael Schuenck dos Santos
          @michaelss




segunda-feira, 14 de maio de 12
Quem sou eu?
            MSc. em Sistemas e
            Computação
            Analista de Sistemas no TRE-TO
            Ex-professor
            Mantenedor do clapside.com

                  @michaelss
                  zeropontoum.tumblr.com


segunda-feira, 14 de maio de 12
Roteiro


               Importância
               Front-end
               Back-end




segunda-feira, 14 de maio de 12
Antes, alguns conceitos...




segunda-feira, 14 de maio de 12
Antes, alguns conceitos...

                                  Performance




segunda-feira, 14 de maio de 12
Antes, alguns conceitos...

                                   Performance



                                  Disponibilidade




segunda-feira, 14 de maio de 12
Antes, alguns conceitos...

                                   Performance



                                  Disponibilidade



                                  Escalabilidade


segunda-feira, 14 de maio de 12
Importância




segunda-feira, 14 de maio de 12
Importância




segunda-feira, 14 de maio de 12
Importância




segunda-feira, 14 de maio de 12
Importância




segunda-feira, 14 de maio de 12
Importância


                                  Criado em Outubro/2010
                                  Mar/12: 30 milhões de usuários
                                  Mai/12: 50 milhões de usuários
                                  upload de 58 fotos/segundo




segunda-feira, 14 de maio de 12
Importância




                                  fonte: http://blog.kissmetrics.com/loading-time/?wide=1
segunda-feira, 14 de maio de 12
Front-end




segunda-feira, 14 de maio de 12
Front-End
                   “80% do tempo de resposta ao usuário é gasto no
                                front-end.” -Yahoo


               Download e interpretação em tempo de execução
                      HTML
                      CSS
                      JavaScript
                      Anúncios, em alguns casos

segunda-feira, 14 de maio de 12
Front-End
                   “80% do tempo de resposta ao usuário é gasto no
                                front-end.” -Yahoo


               Download e interpretação em tempo de execução
                      HTML
                      CSS                         É o lado mais fácil
                      JavaScript                   de ser tratado.

                      Anúncios, em alguns casos

segunda-feira, 14 de maio de 12
Reduzir quantidade de
          requisições HTTP
                      Requisições e respostas têm cabeçalho e corpo

                  Layouts mais             Menos arquivos a serem
                     limpos                    recuperados
                       Combinar               Um só arquivo JS
                       arquivos              Um só arquivo CSS

                    CSS Sprites


                   Image Maps
segunda-feira, 14 de maio de 12
“A proximidade do usuário ao servidor Web tem
                           impacto no tempo de resposta” -Yahoo




segunda-feira, 14 de maio de 12
Usar uma Rede de Entrega
          de Conteúdo (CDN)
                       “A proximidade do usuário ao servidor Web tem
                           impacto no tempo de resposta” -Yahoo

               Distribuir a aplicação em servidores espalhados pelo
               mundo?
                      Não, apenas o conteúdo estático

               CDN própria ou de terceiros ($$$)
                      Akamai, EdgeCast, level3

                      Google: algumas bibliotecas (JQuery, ExtJS, WebFonts)

segunda-feira, 14 de maio de 12
Cache (navegador)

               O que é?
               Adicionar cabeçalho Expires ou Cache-Control
                      Servidor Web: Apache, IIS, nginx
                      Imagens, CSS, JavaScript
               Útil só depois que o usuário já visitou sua página




segunda-feira, 14 de maio de 12
Cache (navegador)

               O que é?                    E se eu precisar alterar
                                                um arquivo?
               Adicionar cabeçalho Expires ou Cache-Control
                      Servidor Web: Apache, IIS, nginx
                      Imagens, CSS, JavaScript
               Útil só depois que o usuário já visitou sua página




segunda-feira, 14 de maio de 12
Cache (navegador)

               O que é?                    E se eu precisar alterar
                                                um arquivo?
               Adicionar cabeçalho Expires ou Cache-Control
                      Servidor Web: Apache, IIS, nginx
                      Imagens, CSS, JavaScript           principal.120.css

               Útil só depois que o usuário já visitou sua página




segunda-feira, 14 de maio de 12
Cache Vazio




                                  Cache Cheio




segunda-feira, 14 de maio de 12
Gzipar                                       A partir do HTTP 1.1


                                  Accept-Encoding: gzip, deflate

                  Cliente                                          Servidor
                                     Content-Encoding: gzip



         Redução no tempo de resposta: ± 70%
         Problemas com navegadores mais antigos
               90% dos navegadores usados suportam Gzip

         Eficaz para arquivos de texto (HTML, JS, CSS, XML, JSON)

segunda-feira, 14 de maio de 12
(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var
  b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||
  (cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||
  cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")
  +"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}
  function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs()
  {setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci()
  {try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var
  d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof
  h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n)
  {p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!
  p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var
  e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(...




segunda-feira, 14 de maio de 12
Minify JavaScript e CSS
  (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var
  b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||
  (cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||
  cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")
  +"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}
  function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs()
  {setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci()
  {try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var
  d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof
  h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n)
  {p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!
  p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var
  e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(...




                         Remoção de espaços, quebras de linhas, tabs

               JSMin, YUI Compressor
               Ruby On Rails: nativo
               Grails: por meio de plugins (UI Performance, Resources)
               Java (JSP/JSF): http://code.google.com/p/granule/
segunda-feira, 14 de maio de 12
Estilos no topo, JS no fim
                                    CSS                  <head>
             Páginas parecem carregar mais
                         rápido                            CSS
                             Páginas renderizam
                              progressivamente           <body>
                                  JavaScript
             Scripts bloqueiam mais de dois
                  downloads paralelos
                         $(document).ready(function(){
      JQuery:               // Your code here            JavaScript
                          });
segunda-feira, 14 de maio de 12
Outras Práticas
               JS e CSS externos
                      Se os JavaScript’s e CSS’s ficarem no HTML, eles
                      não ficarão no cache
               Otimizar imagens
               Evitar Redirects
               Remover scripts duplicados (2 dos top-10 sites dos
               EUA)
               Não escalar imagens em HTML

segunda-feira, 14 de maio de 12
Front-end: ferramentas

               YSlow: http://yslow.org/
               Google PageSpeed: https://developers.google.com/
               speed/pagespeed/insights
               Smush.it: http://developer.yahoo.com/yslow/smushit/
               JSLint: http://jslint.com/




segunda-feira, 14 de maio de 12
Back-end




segunda-feira, 14 de maio de 12
Back-end
      O cuidado com a capacidade de expansão da infraestrutura
            deve ser proporcional à quantidade de acessos


               Se a infraestrutura não suportar, todo o site pode ficar
               indisponível
               Identificação de gargalos
               Projeto do banco de dados
               Distribuição do processamento e armazenamento


segunda-feira, 14 de maio de 12
Nem sempre...

               Um só servidor de aplicação e um só servidor de BD
                      Muitas vezes é suficiente
               É difícil gerenciar ambientes de alto desempenho
                      Controle do que está em produção




segunda-feira, 14 de maio de 12
Cache (servidor)

        Cliente                   Servidor Web   BD




segunda-feira, 14 de maio de 12
Cache (servidor)

        Cliente                          Servidor Web   BD




                    Proxy HTTP reverso com cache




segunda-feira, 14 de maio de 12
Cache (servidor)

        Cliente                          Servidor Web       BD




                    Proxy HTTP reverso com cache


   Ex.: Varnish, Nginx e Apache com mod_cache e mod_proxy
   Entrega aumentada em 300 - 1000x (Varnish)
   Útil: leituras mais frequentes que escritas
segunda-feira, 14 de maio de 12
Cache (servidor)

        Cliente                          Servidor Web                BD




                    Proxy HTTP reverso com cache    Cache de dados


   Ex.: Varnish, Nginx e Apache com mod_cache e mod_proxy
   Entrega aumentada em 300 - 1000x (Varnish)
   Útil: leituras mais frequentes que escritas
segunda-feira, 14 de maio de 12
Cache (servidor)
                                  Ex1.: Memcached: genérico e distribuído, usado por
                                  YouTube, Twitter, Wikipedia, Flickr
                                  Ex2.: Ehcache: Java, usada mais em sistemas empresariais

        Cliente                                 Servidor Web                       BD




                    Proxy HTTP reverso com cache               Cache de dados


   Ex.: Varnish, Nginx e Apache com mod_cache e mod_proxy
   Entrega aumentada em 300 - 1000x (Varnish)
   Útil: leituras mais frequentes que escritas
segunda-feira, 14 de maio de 12
Load Balancers




segunda-feira, 14 de maio de 12
BD’s NoSQL
               Sem SQL: interação mais “leve” e direta

               BD servem apenas para armazenamento e recuperação:

                      Sem lógica no BD

                      Duplicação p/ performance

               Arquitetura distribuída, eventualmente consistentes


           Documentos                    Chave-Valor                 Objeto

                                      Apache Cassandra
         MongoDB
                                           Redis                     db4o
      Apache CouchDB
                                         BerkleyDB
segunda-feira, 14 de maio de 12
Servidores Web orientados
          a eventos
             Também chamados “servidores
             assíncronos”
             Alternativa aos servidores Web
             “orientados a processos”




segunda-feira, 14 de maio de 12
Servidores Web orientados
          a eventos
             Também chamados “servidores
             assíncronos”
             Alternativa aos servidores Web
             “orientados a processos”




segunda-feira, 14 de maio de 12
Cloud
                                                                 SaaS
               Ótima opção                                Aplicações (email, CRM,
                                                            comunicação, etc)
                      Simplicidade
                      Plataforma estável e aprovada              PaaS
                                                           Servidores Web, BD,
                                                            desenvolvimento
               Contra:
                      Falta de serviços no Brasil                 IaaS
                      (dependência da relação US$ x R$)    Armazenamento, VM’s,
                                                          balanceamento de carga




segunda-feira, 14 de maio de 12
Referências
            Front-end:

                  Steve Souders. High Performance Web Sites. O’Reilly, 2007.

                  Steve Souders. Even Faster Web Sites. O’Reilly, 2009.

                  http://developer.yahoo.com/performance/rules.html

            Back-end:

                  Martin L. Abbot & Michael T. Fischer. Scalability Rules: 50 Principles
                  for Scaling Web Sites. Addison-Wesley Professional, 2011.

                  Martin L. Abbot & Michael T. Fischer. The Art of Scalability: Scalable
                  Web Architecture, Processes, and Organizations for the Modern
                  Enterprise. Addison-Wesley Professional, 2009.



segunda-feira, 14 de maio de 12
Importância - de novo




segunda-feira, 14 de maio de 12
Importância - de novo




segunda-feira, 14 de maio de 12
Importância - de novo




segunda-feira, 14 de maio de 12
Importância - de novo




segunda-feira, 14 de maio de 12
Alta Performance de
          Aplicações Web
          Michael Schuenck dos Santos
          @michaelss




segunda-feira, 14 de maio de 12

Weitere ähnliche Inhalte

Was ist angesagt?

Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento webRodrigo Rodrigues
 
Introducao desenvolvimento-web
Introducao desenvolvimento-webIntroducao desenvolvimento-web
Introducao desenvolvimento-webMarcio Mota
 
JS Experience 2017 - Otimizando o front end
JS Experience 2017 - Otimizando o front endJS Experience 2017 - Otimizando o front end
JS Experience 2017 - Otimizando o front endiMasters
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento WebSérgio Souza Costa
 
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
 
Introdução a programação para a Internet
Introdução a programação para a InternetIntrodução a programação para a Internet
Introdução a programação para a InternetLeonardo Soares
 
SEO - Otimização de Sites
SEO - Otimização de SitesSEO - Otimização de Sites
SEO - Otimização de SitesRicardo Martins
 
Navegadores por de baixo dos panos - Ana Luiza Bastos
Navegadores por de baixo dos panos - Ana Luiza BastosNavegadores por de baixo dos panos - Ana Luiza Bastos
Navegadores por de baixo dos panos - Ana Luiza BastosiMasters
 
Desenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDesenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDaniel Paz
 
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 WordPressWordCamp Floripa
 
Performance em Serviços Web - Vinicius Mello
Performance em Serviços Web - Vinicius MelloPerformance em Serviços Web - Vinicius Mello
Performance em Serviços Web - Vinicius MelloTchelinux
 
Minicurso grails
Minicurso grailsMinicurso grails
Minicurso grailsNatã Melo
 

Was ist angesagt? (13)

Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
Introducao desenvolvimento-web
Introducao desenvolvimento-webIntroducao desenvolvimento-web
Introducao desenvolvimento-web
 
JS Experience 2017 - Otimizando o front end
JS Experience 2017 - Otimizando o front endJS Experience 2017 - Otimizando o front end
JS Experience 2017 - Otimizando o front end
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 
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
 
Introdução a programação para a Internet
Introdução a programação para a InternetIntrodução a programação para a Internet
Introdução a programação para a Internet
 
SEO - Otimização de Sites
SEO - Otimização de SitesSEO - Otimização de Sites
SEO - Otimização de Sites
 
Desenvolvimento web produtivo
Desenvolvimento web produtivoDesenvolvimento web produtivo
Desenvolvimento web produtivo
 
Navegadores por de baixo dos panos - Ana Luiza Bastos
Navegadores por de baixo dos panos - Ana Luiza BastosNavegadores por de baixo dos panos - Ana Luiza Bastos
Navegadores por de baixo dos panos - Ana Luiza Bastos
 
Desenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDesenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi Builder
 
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
 
Performance em Serviços Web - Vinicius Mello
Performance em Serviços Web - Vinicius MelloPerformance em Serviços Web - Vinicius Mello
Performance em Serviços Web - Vinicius Mello
 
Minicurso grails
Minicurso grailsMinicurso grails
Minicurso grails
 

Ähnlich wie Alta performance de Aplicações Web

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
 
App Web Escalaveis Fisl
App Web Escalaveis FislApp Web Escalaveis Fisl
App Web Escalaveis FislElton Minetto
 
Performance - Acelere seu site! Na web tempo é mais que dinheiro.
Performance - Acelere seu site! Na web tempo é mais que dinheiro.Performance - Acelere seu site! Na web tempo é mais que dinheiro.
Performance - Acelere seu site! Na web tempo é mais que dinheiro.Gustavo Corrêa Alves
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveiselliando dias
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineFrederico Maia Arantes
 
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)Aryel Tupinambá
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsVinicius Reis
 
Core Web Vitals - Técnicas de Performance Web pra Javascript
Core Web Vitals - Técnicas de Performance Web pra Javascript Core Web Vitals - Técnicas de Performance Web pra Javascript
Core Web Vitals - Técnicas de Performance Web pra Javascript CamiloMicheletto1
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
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
 
Sites Responsivos - Como mostrar o mesmo conteúdo em diversos aparelhos
Sites Responsivos - Como mostrar o mesmo conteúdo em diversos aparelhosSites Responsivos - Como mostrar o mesmo conteúdo em diversos aparelhos
Sites Responsivos - Como mostrar o mesmo conteúdo em diversos aparelhosGilberto Crespo
 
5505 otimizando frontends
5505   otimizando frontends5505   otimizando frontends
5505 otimizando frontendsAndre Baltieri
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressJulian Fernandes
 
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...Cleber Dantas
 
Otimização Front-end para WordPress
Otimização Front-end para WordPressOtimização Front-end para WordPress
Otimização Front-end para WordPressGuga Alves
 
PHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkPHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkRafael Dohms
 
HANA XS Data Services - SAP Inside Track Joinville 2015 - Fábio Pagoti
HANA XS Data Services - SAP Inside Track Joinville 2015 - Fábio PagotiHANA XS Data Services - SAP Inside Track Joinville 2015 - Fábio Pagoti
HANA XS Data Services - SAP Inside Track Joinville 2015 - Fábio PagotiFábio Luiz Esperati Pagoti
 

Ähnlich wie Alta performance de Aplicações Web (20)

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
 
App Web Escalaveis Fisl
App Web Escalaveis FislApp Web Escalaveis Fisl
App Web Escalaveis Fisl
 
Performance - Acelere seu site! Na web tempo é mais que dinheiro.
Performance - Acelere seu site! Na web tempo é mais que dinheiro.Performance - Acelere seu site! Na web tempo é mais que dinheiro.
Performance - Acelere seu site! Na web tempo é mais que dinheiro.
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App Engine
 
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
 
Core Web Vitals - Técnicas de Performance Web pra Javascript
Core Web Vitals - Técnicas de Performance Web pra Javascript Core Web Vitals - Técnicas de Performance Web pra Javascript
Core Web Vitals - Técnicas de Performance Web pra Javascript
 
Easy Rails
Easy RailsEasy Rails
Easy Rails
 
Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Web Performance Client Side
Web Performance Client SideWeb Performance Client Side
Web Performance Client Side
 
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
 
Sites Responsivos - Como mostrar o mesmo conteúdo em diversos aparelhos
Sites Responsivos - Como mostrar o mesmo conteúdo em diversos aparelhosSites Responsivos - Como mostrar o mesmo conteúdo em diversos aparelhos
Sites Responsivos - Como mostrar o mesmo conteúdo em diversos aparelhos
 
5505 otimizando frontends
5505   otimizando frontends5505   otimizando frontends
5505 otimizando frontends
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPress
 
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
 
Otimização Front-end para WordPress
Otimização Front-end para WordPressOtimização Front-end para WordPress
Otimização Front-end para WordPress
 
PHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkPHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao Framework
 
HANA XS Data Services - SAP Inside Track Joinville 2015 - Fábio Pagoti
HANA XS Data Services - SAP Inside Track Joinville 2015 - Fábio PagotiHANA XS Data Services - SAP Inside Track Joinville 2015 - Fábio Pagoti
HANA XS Data Services - SAP Inside Track Joinville 2015 - Fábio Pagoti
 

Alta performance de Aplicações Web

  • 1. Alta Performance de Aplicações Web Michael Schuenck dos Santos @michaelss segunda-feira, 14 de maio de 12
  • 2. Quem sou eu? MSc. em Sistemas e Computação Analista de Sistemas no TRE-TO Ex-professor Mantenedor do clapside.com @michaelss zeropontoum.tumblr.com segunda-feira, 14 de maio de 12
  • 3. Roteiro Importância Front-end Back-end segunda-feira, 14 de maio de 12
  • 5. Antes, alguns conceitos... Performance segunda-feira, 14 de maio de 12
  • 6. Antes, alguns conceitos... Performance Disponibilidade segunda-feira, 14 de maio de 12
  • 7. Antes, alguns conceitos... Performance Disponibilidade Escalabilidade segunda-feira, 14 de maio de 12
  • 12. Importância Criado em Outubro/2010 Mar/12: 30 milhões de usuários Mai/12: 50 milhões de usuários upload de 58 fotos/segundo segunda-feira, 14 de maio de 12
  • 13. Importância fonte: http://blog.kissmetrics.com/loading-time/?wide=1 segunda-feira, 14 de maio de 12
  • 15. Front-End “80% do tempo de resposta ao usuário é gasto no front-end.” -Yahoo Download e interpretação em tempo de execução HTML CSS JavaScript Anúncios, em alguns casos segunda-feira, 14 de maio de 12
  • 16. Front-End “80% do tempo de resposta ao usuário é gasto no front-end.” -Yahoo Download e interpretação em tempo de execução HTML CSS É o lado mais fácil JavaScript de ser tratado. Anúncios, em alguns casos segunda-feira, 14 de maio de 12
  • 17. Reduzir quantidade de requisições HTTP Requisições e respostas têm cabeçalho e corpo Layouts mais Menos arquivos a serem limpos recuperados Combinar Um só arquivo JS arquivos Um só arquivo CSS CSS Sprites Image Maps segunda-feira, 14 de maio de 12
  • 18. “A proximidade do usuário ao servidor Web tem impacto no tempo de resposta” -Yahoo segunda-feira, 14 de maio de 12
  • 19. Usar uma Rede de Entrega de Conteúdo (CDN) “A proximidade do usuário ao servidor Web tem impacto no tempo de resposta” -Yahoo Distribuir a aplicação em servidores espalhados pelo mundo? Não, apenas o conteúdo estático CDN própria ou de terceiros ($$$) Akamai, EdgeCast, level3 Google: algumas bibliotecas (JQuery, ExtJS, WebFonts) segunda-feira, 14 de maio de 12
  • 20. Cache (navegador) O que é? Adicionar cabeçalho Expires ou Cache-Control Servidor Web: Apache, IIS, nginx Imagens, CSS, JavaScript Útil só depois que o usuário já visitou sua página segunda-feira, 14 de maio de 12
  • 21. Cache (navegador) O que é? E se eu precisar alterar um arquivo? Adicionar cabeçalho Expires ou Cache-Control Servidor Web: Apache, IIS, nginx Imagens, CSS, JavaScript Útil só depois que o usuário já visitou sua página segunda-feira, 14 de maio de 12
  • 22. Cache (navegador) O que é? E se eu precisar alterar um arquivo? Adicionar cabeçalho Expires ou Cache-Control Servidor Web: Apache, IIS, nginx Imagens, CSS, JavaScript principal.120.css Útil só depois que o usuário já visitou sua página segunda-feira, 14 de maio de 12
  • 23. Cache Vazio Cache Cheio segunda-feira, 14 de maio de 12
  • 24. Gzipar A partir do HTTP 1.1 Accept-Encoding: gzip, deflate Cliente Servidor Content-Encoding: gzip Redução no tempo de resposta: ± 70% Problemas com navegadores mais antigos 90% dos navegadores usados suportam Gzip Eficaz para arquivos de texto (HTML, JS, CSS, XML, JSON) segunda-feira, 14 de maio de 12
  • 25. (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl|| (cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow|| cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"") +"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]} function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs() {setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci() {try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n) {p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&! p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(... segunda-feira, 14 de maio de 12
  • 26. Minify JavaScript e CSS (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl|| (cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow|| cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"") +"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]} function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs() {setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci() {try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n) {p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&! p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(... Remoção de espaços, quebras de linhas, tabs JSMin, YUI Compressor Ruby On Rails: nativo Grails: por meio de plugins (UI Performance, Resources) Java (JSP/JSF): http://code.google.com/p/granule/ segunda-feira, 14 de maio de 12
  • 27. Estilos no topo, JS no fim CSS <head> Páginas parecem carregar mais rápido CSS Páginas renderizam progressivamente <body> JavaScript Scripts bloqueiam mais de dois downloads paralelos $(document).ready(function(){ JQuery: // Your code here JavaScript }); segunda-feira, 14 de maio de 12
  • 28. Outras Práticas JS e CSS externos Se os JavaScript’s e CSS’s ficarem no HTML, eles não ficarão no cache Otimizar imagens Evitar Redirects Remover scripts duplicados (2 dos top-10 sites dos EUA) Não escalar imagens em HTML segunda-feira, 14 de maio de 12
  • 29. Front-end: ferramentas YSlow: http://yslow.org/ Google PageSpeed: https://developers.google.com/ speed/pagespeed/insights Smush.it: http://developer.yahoo.com/yslow/smushit/ JSLint: http://jslint.com/ segunda-feira, 14 de maio de 12
  • 31. Back-end O cuidado com a capacidade de expansão da infraestrutura deve ser proporcional à quantidade de acessos Se a infraestrutura não suportar, todo o site pode ficar indisponível Identificação de gargalos Projeto do banco de dados Distribuição do processamento e armazenamento segunda-feira, 14 de maio de 12
  • 32. Nem sempre... Um só servidor de aplicação e um só servidor de BD Muitas vezes é suficiente É difícil gerenciar ambientes de alto desempenho Controle do que está em produção segunda-feira, 14 de maio de 12
  • 33. Cache (servidor) Cliente Servidor Web BD segunda-feira, 14 de maio de 12
  • 34. Cache (servidor) Cliente Servidor Web BD Proxy HTTP reverso com cache segunda-feira, 14 de maio de 12
  • 35. Cache (servidor) Cliente Servidor Web BD Proxy HTTP reverso com cache Ex.: Varnish, Nginx e Apache com mod_cache e mod_proxy Entrega aumentada em 300 - 1000x (Varnish) Útil: leituras mais frequentes que escritas segunda-feira, 14 de maio de 12
  • 36. Cache (servidor) Cliente Servidor Web BD Proxy HTTP reverso com cache Cache de dados Ex.: Varnish, Nginx e Apache com mod_cache e mod_proxy Entrega aumentada em 300 - 1000x (Varnish) Útil: leituras mais frequentes que escritas segunda-feira, 14 de maio de 12
  • 37. Cache (servidor) Ex1.: Memcached: genérico e distribuído, usado por YouTube, Twitter, Wikipedia, Flickr Ex2.: Ehcache: Java, usada mais em sistemas empresariais Cliente Servidor Web BD Proxy HTTP reverso com cache Cache de dados Ex.: Varnish, Nginx e Apache com mod_cache e mod_proxy Entrega aumentada em 300 - 1000x (Varnish) Útil: leituras mais frequentes que escritas segunda-feira, 14 de maio de 12
  • 39. BD’s NoSQL Sem SQL: interação mais “leve” e direta BD servem apenas para armazenamento e recuperação: Sem lógica no BD Duplicação p/ performance Arquitetura distribuída, eventualmente consistentes Documentos Chave-Valor Objeto Apache Cassandra MongoDB Redis db4o Apache CouchDB BerkleyDB segunda-feira, 14 de maio de 12
  • 40. Servidores Web orientados a eventos Também chamados “servidores assíncronos” Alternativa aos servidores Web “orientados a processos” segunda-feira, 14 de maio de 12
  • 41. Servidores Web orientados a eventos Também chamados “servidores assíncronos” Alternativa aos servidores Web “orientados a processos” segunda-feira, 14 de maio de 12
  • 42. Cloud SaaS Ótima opção Aplicações (email, CRM, comunicação, etc) Simplicidade Plataforma estável e aprovada PaaS Servidores Web, BD, desenvolvimento Contra: Falta de serviços no Brasil IaaS (dependência da relação US$ x R$) Armazenamento, VM’s, balanceamento de carga segunda-feira, 14 de maio de 12
  • 43. Referências Front-end: Steve Souders. High Performance Web Sites. O’Reilly, 2007. Steve Souders. Even Faster Web Sites. O’Reilly, 2009. http://developer.yahoo.com/performance/rules.html Back-end: Martin L. Abbot & Michael T. Fischer. Scalability Rules: 50 Principles for Scaling Web Sites. Addison-Wesley Professional, 2011. Martin L. Abbot & Michael T. Fischer. The Art of Scalability: Scalable Web Architecture, Processes, and Organizations for the Modern Enterprise. Addison-Wesley Professional, 2009. segunda-feira, 14 de maio de 12
  • 44. Importância - de novo segunda-feira, 14 de maio de 12
  • 45. Importância - de novo segunda-feira, 14 de maio de 12
  • 46. Importância - de novo segunda-feira, 14 de maio de 12
  • 47. Importância - de novo segunda-feira, 14 de maio de 12
  • 48. Alta Performance de Aplicações Web Michael Schuenck dos Santos @michaelss segunda-feira, 14 de maio de 12