Ruby
A apresentação já vai começar ...
AkitaOnRails.com
@AkitaOnRails
AkitaOnRails.com
@AkitaOnRails
www.slideshare.net/akitaonrails
     fabio.akita@gonow.com.br
Entendendo a Web
Dicas sobre Desenvolvimento Web com Ruby



            Fabio Akita
Recapitulando ...
Rails não Escala
(TM)

Rails não Escala
Blaine Cook

http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
Para colocar as coisas em
  perspectiva, o Friendster foi
escrito em Java e eles mudaram
 para PHP. MySpace foi escrito
em...
Para colocar as coisas em
  perspectiva, o Friendster foi
escrito em Java e eles mudaram
 para PHP. MySpace foi escrito
em...
“O The New York Times usou Ruby on Rails para
  agregar, analizar e mostrar os resultados das
 eleições em quase tempo rea...
“O The New York Times usou Ruby on Rails para
  agregar, analizar e mostrar os resultados das
 eleições em quase tempo rea...
Browser




Web Server




 MySQL
Browser


             Varnish/HAProxy


Web Server




 MySQL
Browser


             Varnish/HAProxy


Web Server


               Memcached


 MySQL
Browser


              Varnish/HAProxy


Web Server


                Memcached


 MySQL

             CouchDB/MongoDB
Ruby é Lento
(TM)
Ruby é Lento
Existem mentiras,
mentiras malditas e
   estatísticas.
Existem mentiras,
mentiras malditas e
   estatísticas.
Existem mentiras,
mentiras malditas e
   estatísticas.
x mais lento que C++
x mais lento que C++

                                          130
                                   97.5
              ...
x mais lento que C++

                                          130
                                   97.5
              ...
Homepage:
  331 ms
Homepage:   Total:
  331 ms    5.45 s
Performance
      !=
Escalabilidade
Sempre se Lembre




Poderíamos contratar um Macaco Treinado
        para fazer seu Trabalho!
Na Prática
6
Técnicas
Menos Requisições
Mini que CSS e
  Javascript
Juicer
http://github.com/cjohansen/juicer/
gem install juicer



script/plugin install git://github.com/ktheory/juicer-rails.git
gem install juicer



script/plugin install git://github.com/ktheory/juicer-rails.git
juicer install yuicompressor

juicer install jslint

juicer install closure_compiler
juicer install yuicompressor

juicer install jslint

juicer install closure_compiler
juicer install yuicompressor

juicer install jslint

juicer install closure_compiler
/app/views/layouts/application.html.erb




     <%= juiced_tag '/stylesheets/application.css' %>
     <%= yield(:head) %>...
/app/views/layouts/application.html.erb




     <%= juiced_tag '/stylesheets/application.css' %>
     <%= yield(:head) %>...
/public/stylesheets/application.css



                         @import url("reset.css");
                         @import...
/public/stylesheets/application.css



                         @import url("reset.css");
                         @import...
juicer merge public/stylesheets/application.css

public/stylesheets/application.min.css

juicer merge -i public/javascript...
juicer merge public/stylesheets/application.css

public/stylesheets/application.min.css

juicer merge -i public/javascript...
juicer merge public/stylesheets/application.css

public/stylesheets/application.min.css

juicer merge -i public/javascript...
juicer merge public/stylesheets/application.css

public/stylesheets/application.min.css

juicer merge -i public/javascript...
DEVELOPMENT
DEVELOPMENT
PRODUCTION
PRODUCTION
Asset Hosts
Navegadores abrem poucas conexões
     simultâneas por domínio
/app/views/hello/gallery.html.erb



             <% title "Gallery" %>


             <% @images.each do |image| -%>
    ...
/app/views/hello/gallery.html.erb



             <% title "Gallery" %>


             <% @images.each do |image| -%>
    ...
DEVELOPMENT
DEVELOPMENT
/con g/environments/production.rb



"#{protocol}://asset#{rand(6) + 1}.akitaonrails.local:3000"
/con g/environments/production.rb



"#{protocol}://asset#{rand(6) + 1}.akitaonrails.local:3000"
/etc/hosts




##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. ...
PRODUCTION
PRODUCTION
PRODUCTION
PRODUCTION
Javascript embaixo!
/app/views/layouts/application.html.erb


  <head>
     <title><%= h(yield(:title) || "Untitled") %></title>
     <%= styl...
/app/views/layouts/application.html.erb


  <head>
     <title><%= h(yield(:title) || "Untitled") %></title>
     <%= styl...
/app/views/layouts/application.html.erb


       ...
       <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0...
/app/views/layouts/application.html.erb


       ...
       <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0...
Gzip
a2enmod de ate


editar
/etc/apache2/mods-available/de ate.conf
a2enmod de ate


editar
/etc/apache2/mods-available/de ate.conf
/etc/apache2/mods-available/de ate.conf


    <IfModule mod_deflate.c>
      AddOutputFilterByType DEFLATE text/plain
    ...
Cabeçalhos de
  Expiração
a2enmod expires


editar
/etc/apache2/mods-available/expires.conf
a2enmod expires


editar
/etc/apache2/mods-available/expires.conf
/etc/apache2/mods-available/expires.conf


<IfModule mod_expires.c>
   ExpiresByType image/x-icon "access plus 1 year"
   ...
/etc/apache2/mods-available/expires.conf


<IfModule mod_expires.c>
   ExpiresByType image/x-icon "access plus 1 year"
   ...
Cache Busters
/app/views/layouts/application.html.erb




         <%= stylesheet_link_tag 'application' %>


         <%= javascript_in...
/app/views/layouts/application.html.erb




<link href="/stylesheets/application.css?1264345891"
media="screen" rel="style...
/app/views/layouts/application.html.erb




<link href="/stylesheets/application.css?1264345891"
media="screen" rel="style...
Use CDNs
/app/views/layouts/application.html.erb




  <script src="/javascripts/jquery-1.4.min.js"

  type="text/javascript"></scr...
/app/views/layouts/application.html.erb



 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/

 jquery.min.j...
/app/views/layouts/application.html.erb



 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/

 jquery.min.j...
Search
select * from ...
where ... like “%...%”
select * from ...
where ... like “%...%”
 or ... like “%...%”
 or ... like “%...%”
 or ... like “%...%”
 or ... like “%......
Open Source Enterprise Search Platform
Baseado no famoso Lucene
Full Text Search, com relevância
Indexa documentos (Word, ...
Open Source Enterprise Search Platform
Baseado no famoso Lucene
Full Text Search, com relevância
Indexa documentos (Word, ...
Open Source Enterprise Search Platform
Baseado no famoso Lucene
Full Text Search, com relevância
Indexa documentos (Word, ...
Open Source Enterprise Search Platform
Baseado no famoso Lucene
Full Text Search, com relevância
Indexa documentos (Word, ...
Open Source Enterprise Search Platform
Baseado no famoso Lucene
Full Text Search, com relevância
Indexa documentos (Word, ...
Open Source Enterprise Search Platform
Baseado no famoso Lucene
Full Text Search, com relevância
Indexa documentos (Word, ...
SOLR

Sphinx

Xapian
SOLR

Sphinx

Xapian
SOLR

Sphinx

Xapian
select * from ...
where ... like “%...%”
 or ... like “%...%”
 or ... like “%...%”
 or ... like “%...%”
 or ... like “%......
Tarefas
Assíncronas
Requisição
Processamento
Requisição
Processamento
Requisição                   Resposta
Crontab
RMagick
Redis
  Workers
Resque-Web
280 ms
             Processamento
Requisição
51 ms
              Processamento




Requisição                    Resposta


             Worker
Resque       Redis

Delayed Job     SQL

  Warren      RabbitMQ

Whenever      Cron Jobs
Resque       Redis

Delayed Job     SQL

  Warren      RabbitMQ

Whenever      Cron Jobs
Resque       Redis

Delayed Job     SQL

  Warren      RabbitMQ

Whenever      Cron Jobs
Resque       Redis

Delayed Job     SQL

  Warren      RabbitMQ

Whenever      Cron Jobs
Imagens

 Relatórios

Web Services

Transações
Imagens

 Relatórios

Web Services

Transações
Imagens

 Relatórios

Web Services

Transações
Imagens

 Relatórios

Web Services

Transações
Aprendendo
   Mais
RAILS LABS
RAILSCASTS.com
caelum.com.br
egenial.com.br
Entenda os browsers

   Entenda HTTP

    Arquiteturas

 Mundo Assíncrono

Mundo não Relacional
Entenda os browsers

   Entenda HTTP

    Arquiteturas

 Mundo Assíncrono

Mundo não Relacional
Entenda os browsers

   Entenda HTTP

    Arquiteturas

 Mundo Assíncrono

Mundo não Relacional
Entenda os browsers

   Entenda HTTP

    Arquiteturas

 Mundo Assíncrono

Mundo não Relacional
Entenda os browsers

   Entenda HTTP

    Arquiteturas

 Mundo Assíncrono

Mundo não Relacional
Obrigado!
www.slideshare.net/akitaonrails




     fabio.akita@gonow.com.br
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Upcoming SlideShare
Loading in …5
×

Consegi 2010 - Dicas de Desenvolvimento Web com Ruby

2,062 views

Published on

Esta é a palestra que dei no Consegi 2010 em Brasília. Sobre dicas gerais sobre web, em particular implementando com Ruby on Rails. YSlow, Full Text Search e Tarefas Assíncronas.

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,062
On SlideShare
0
From Embeds
0
Number of Embeds
281
Actions
Shares
0
Downloads
61
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Consegi 2010 - Dicas de Desenvolvimento Web com Ruby

  1. 1. Ruby A apresentação já vai começar ...
  2. 2. AkitaOnRails.com @AkitaOnRails
  3. 3. AkitaOnRails.com @AkitaOnRails
  4. 4. www.slideshare.net/akitaonrails fabio.akita@gonow.com.br
  5. 5. Entendendo a Web Dicas sobre Desenvolvimento Web com Ruby Fabio Akita
  6. 6. Recapitulando ...
  7. 7. Rails não Escala
  8. 8. (TM) Rails não Escala
  9. 9. Blaine Cook http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
  10. 10. Para colocar as coisas em perspectiva, o Friendster foi escrito em Java e eles mudaram para PHP. MySpace foi escrito em ColdFusion e eles mudaram para ASP.NET. Blaine Cook http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
  11. 11. Para colocar as coisas em perspectiva, o Friendster foi escrito em Java e eles mudaram para PHP. MySpace foi escrito em ColdFusion e eles mudaram para ASP.NET. Quando as pessoas caem em problemas de escalabilidade, normalmente acham que a linguagem é o problema, mas eu acho que isso raramente é a realidade. Blaine Cook http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
  12. 12. “O The New York Times usou Ruby on Rails para agregar, analizar e mostrar os resultados das eleições em quase tempo real em um de seus sites mais acessados de todos os tempos.” http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1
  13. 13. “O The New York Times usou Ruby on Rails para agregar, analizar e mostrar os resultados das eleições em quase tempo real em um de seus sites mais acessados de todos os tempos.” http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1
  14. 14. Browser Web Server MySQL
  15. 15. Browser Varnish/HAProxy Web Server MySQL
  16. 16. Browser Varnish/HAProxy Web Server Memcached MySQL
  17. 17. Browser Varnish/HAProxy Web Server Memcached MySQL CouchDB/MongoDB
  18. 18. Ruby é Lento
  19. 19. (TM) Ruby é Lento
  20. 20. Existem mentiras, mentiras malditas e estatísticas.
  21. 21. Existem mentiras, mentiras malditas e estatísticas.
  22. 22. Existem mentiras, mentiras malditas e estatísticas.
  23. 23. x mais lento que C++
  24. 24. x mais lento que C++ 130 97.5 65 32.5 0 Python 2 Ruby 1.9 JRuby Perl Python 3 PHP Ruby 1.8
  25. 25. x mais lento que C++ 130 97.5 65 32.5 0 Python 2 Ruby 1.9 JRuby Perl Python 3 PHP Ruby 1.8
  26. 26. Homepage: 331 ms
  27. 27. Homepage: Total: 331 ms 5.45 s
  28. 28. Performance != Escalabilidade
  29. 29. Sempre se Lembre Poderíamos contratar um Macaco Treinado para fazer seu Trabalho!
  30. 30. Na Prática
  31. 31. 6 Técnicas
  32. 32. Menos Requisições
  33. 33. Mini que CSS e Javascript
  34. 34. Juicer http://github.com/cjohansen/juicer/
  35. 35. gem install juicer script/plugin install git://github.com/ktheory/juicer-rails.git
  36. 36. gem install juicer script/plugin install git://github.com/ktheory/juicer-rails.git
  37. 37. juicer install yuicompressor juicer install jslint juicer install closure_compiler
  38. 38. juicer install yuicompressor juicer install jslint juicer install closure_compiler
  39. 39. juicer install yuicompressor juicer install jslint juicer install closure_compiler
  40. 40. /app/views/layouts/application.html.erb <%= juiced_tag '/stylesheets/application.css' %> <%= yield(:head) %> </head> <body> ... <%= juiced_tag '/javascripts/application.js' %> </body>
  41. 41. /app/views/layouts/application.html.erb <%= juiced_tag '/stylesheets/application.css' %> <%= yield(:head) %> </head> <body> ... <%= juiced_tag '/javascripts/application.js' %> </body>
  42. 42. /public/stylesheets/application.css @import url("reset.css"); @import url("base.css"); @import url("fonts.css"); ... /public/javascripts/application.js /* @depends jquery-1.4.min.js @depends jquery.edit_in_place.js @depends jqueryamail.js */ ...
  43. 43. /public/stylesheets/application.css @import url("reset.css"); @import url("base.css"); @import url("fonts.css"); ... /public/javascripts/application.js /* @depends jquery-1.4.min.js @depends jquery.edit_in_place.js @depends jqueryamail.js */ ...
  44. 44. juicer merge public/stylesheets/application.css public/stylesheets/application.min.css juicer merge -i public/javascripts/application.js public/javascripts/application.min.js
  45. 45. juicer merge public/stylesheets/application.css public/stylesheets/application.min.css juicer merge -i public/javascripts/application.js public/javascripts/application.min.js
  46. 46. juicer merge public/stylesheets/application.css public/stylesheets/application.min.css juicer merge -i public/javascripts/application.js public/javascripts/application.min.js
  47. 47. juicer merge public/stylesheets/application.css public/stylesheets/application.min.css juicer merge -i public/javascripts/application.js public/javascripts/application.min.js
  48. 48. DEVELOPMENT
  49. 49. DEVELOPMENT
  50. 50. PRODUCTION
  51. 51. PRODUCTION
  52. 52. Asset Hosts Navegadores abrem poucas conexões simultâneas por domínio
  53. 53. /app/views/hello/gallery.html.erb <% title "Gallery" %> <% @images.each do |image| -%> <%= image_tag "gallery/#{image}" %> <% end -%>
  54. 54. /app/views/hello/gallery.html.erb <% title "Gallery" %> <% @images.each do |image| -%> <%= image_tag "gallery/#{image}" %> <% end -%>
  55. 55. DEVELOPMENT
  56. 56. DEVELOPMENT
  57. 57. /con g/environments/production.rb "#{protocol}://asset#{rand(6) + 1}.akitaonrails.local:3000"
  58. 58. /con g/environments/production.rb "#{protocol}://asset#{rand(6) + 1}.akitaonrails.local:3000"
  59. 59. /etc/hosts ## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost fe80::1%lo0 localhost 127.0.0.1 asset1.akitaonrails.local asset2.akitaonrails.local asset3.akitaonrails.local asset4.akitaonrails.local asset5.akitaonrails.local asset6.akitaonrails.local www.akitaonrails.local
  60. 60. PRODUCTION
  61. 61. PRODUCTION
  62. 62. PRODUCTION
  63. 63. PRODUCTION
  64. 64. Javascript embaixo!
  65. 65. /app/views/layouts/application.html.erb <head> <title><%= h(yield(:title) || "Untitled") %></title> <%= stylesheet_link_tag 'application' %> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/ jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery- ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/ swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/ CFInstall.min.js" type="text/javascript"></script> <%= yield(:head) %> </head> <body> ...
  66. 66. /app/views/layouts/application.html.erb <head> <title><%= h(yield(:title) || "Untitled") %></title> <%= stylesheet_link_tag 'application' %> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/ jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery- ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/ swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/ CFInstall.min.js" type="text/javascript"></script> <%= yield(:head) %> </head> <body> ...
  67. 67. /app/views/layouts/application.html.erb ... <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/ jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/ jquery-ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/ swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/ CFInstall.min.js" type="text/javascript"></script> <script type="text/javascript"> // meu javascript customizado ... </script> </body> </html>
  68. 68. /app/views/layouts/application.html.erb ... <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/ jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/ jquery-ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/ swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/ CFInstall.min.js" type="text/javascript"></script> <script type="text/javascript"> // meu javascript customizado ... </script> </body> </html>
  69. 69. Gzip
  70. 70. a2enmod de ate editar /etc/apache2/mods-available/de ate.conf
  71. 71. a2enmod de ate editar /etc/apache2/mods-available/de ate.conf
  72. 72. /etc/apache2/mods-available/de ate.conf <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/x-httpd-php AddOutputFilterByType DEFLATE application/x-httpd-fastphp AddOutputFilterByType DEFLATE application/x-httpd-eruby DeflateCompressionLevel 9
  73. 73. Cabeçalhos de Expiração
  74. 74. a2enmod expires editar /etc/apache2/mods-available/expires.conf
  75. 75. a2enmod expires editar /etc/apache2/mods-available/expires.conf
  76. 76. /etc/apache2/mods-available/expires.conf <IfModule mod_expires.c> ExpiresByType image/x-icon "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType application/pdf "access plus 1 year" ExpiresByType audio/x-wav "access plus 1 year" ExpiresByType audio/mpeg "access plus 1 year" ExpiresByType video/mpeg "access plus 1 year" ExpiresByType video/mp4 "access plus 1 year" ExpiresByType video/quicktime "access plus 1 year" ExpiresByType video/x-ms-wmv "access plus 1 year" ExpiresByType application/x-shockwave-flash "access 1 month" ExpiresByType text/css "access plus 1 year" ExpiresByType text/javascript "access plus 1 year" </IfModule>
  77. 77. /etc/apache2/mods-available/expires.conf <IfModule mod_expires.c> ExpiresByType image/x-icon "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType application/pdf "access plus 1 year" "access plus 1 year" ExpiresByType audio/x-wav "access plus 1 year" ExpiresByType audio/mpeg "access plus 1 year" ExpiresByType video/mpeg "access plus 1 year" ExpiresByType video/mp4 "access plus 1 year" ExpiresByType video/quicktime "access plus 1 year" ExpiresByType video/x-ms-wmv "access plus 1 year" ExpiresByType application/x-shockwave-flash "access 1 month" ExpiresByType text/css "access plus 1 year" ExpiresByType text/javascript "access plus 1 year" </IfModule>
  78. 78. Cache Busters
  79. 79. /app/views/layouts/application.html.erb <%= stylesheet_link_tag 'application' %> <%= javascript_include_tag 'application' %> <%= image_tag "logo.png" %>
  80. 80. /app/views/layouts/application.html.erb <link href="/stylesheets/application.css?1264345891" media="screen" rel="stylesheet" type="text/css" /> <script src="/javascripts/application.js?1264345058" type="text/javascript"></script> <img alt="Logo" src="/images/logo.png?1268943058" />
  81. 81. /app/views/layouts/application.html.erb <link href="/stylesheets/application.css?1264345891" media="screen" rel="stylesheet" type="text/css" /> <script src="/javascripts/application.js?1264345058" type="text/javascript"></script> <img alt="Logo" src="/images/logo.png?1268943058" />
  82. 82. Use CDNs
  83. 83. /app/views/layouts/application.html.erb <script src="/javascripts/jquery-1.4.min.js" type="text/javascript"></script> <script src="/javascripts/jquery-ui-1.7.2.min.js" type="text/javascript"></script> <script src="/javascripts/swfobject-2.2.js" type="text/javascript"></script> <script src="/javascripts/CFInstall-1.0.2.min.js" type="text/javascript"></script>
  84. 84. /app/views/layouts/application.html.erb <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/ jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/ jquery-ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/ swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/ 1.0.2/CFInstall.min.js" type="text/javascript"></script>
  85. 85. /app/views/layouts/application.html.erb <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/ jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/ jquery-ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/ swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/ 1.0.2/CFInstall.min.js" type="text/javascript"></script>
  86. 86. Search
  87. 87. select * from ... where ... like “%...%”
  88. 88. select * from ... where ... like “%...%” or ... like “%...%” or ... like “%...%” or ... like “%...%” or ... like “%...%”
  89. 89. Open Source Enterprise Search Platform Baseado no famoso Lucene Full Text Search, com relevância Indexa documentos (Word, PDF, etc) Interface REST Roda em containers de Servlet (Tomcat)
  90. 90. Open Source Enterprise Search Platform Baseado no famoso Lucene Full Text Search, com relevância Indexa documentos (Word, PDF, etc) Interface REST Roda em containers de Servlet (Tomcat)
  91. 91. Open Source Enterprise Search Platform Baseado no famoso Lucene Full Text Search, com relevância Indexa documentos (Word, PDF, etc) Interface REST Roda em containers de Servlet (Tomcat)
  92. 92. Open Source Enterprise Search Platform Baseado no famoso Lucene Full Text Search, com relevância Indexa documentos (Word, PDF, etc) Interface REST Roda em containers de Servlet (Tomcat)
  93. 93. Open Source Enterprise Search Platform Baseado no famoso Lucene Full Text Search, com relevância Indexa documentos (Word, PDF, etc) Interface REST Roda em containers de Servlet (Tomcat)
  94. 94. Open Source Enterprise Search Platform Baseado no famoso Lucene Full Text Search, com relevância Indexa documentos (Word, PDF, etc) Interface REST Roda em containers de Servlet (Tomcat)
  95. 95. SOLR Sphinx Xapian
  96. 96. SOLR Sphinx Xapian
  97. 97. SOLR Sphinx Xapian
  98. 98. select * from ... where ... like “%...%” or ... like “%...%” or ... like “%...%” or ... like “%...%” or ... like “%...%”
  99. 99. Tarefas Assíncronas
  100. 100. Requisição
  101. 101. Processamento Requisição
  102. 102. Processamento Requisição Resposta
  103. 103. Crontab
  104. 104. RMagick
  105. 105. Redis Workers Resque-Web
  106. 106. 280 ms Processamento Requisição
  107. 107. 51 ms Processamento Requisição Resposta Worker
  108. 108. Resque Redis Delayed Job SQL Warren RabbitMQ Whenever Cron Jobs
  109. 109. Resque Redis Delayed Job SQL Warren RabbitMQ Whenever Cron Jobs
  110. 110. Resque Redis Delayed Job SQL Warren RabbitMQ Whenever Cron Jobs
  111. 111. Resque Redis Delayed Job SQL Warren RabbitMQ Whenever Cron Jobs
  112. 112. Imagens Relatórios Web Services Transações
  113. 113. Imagens Relatórios Web Services Transações
  114. 114. Imagens Relatórios Web Services Transações
  115. 115. Imagens Relatórios Web Services Transações
  116. 116. Aprendendo Mais
  117. 117. RAILS LABS
  118. 118. RAILSCASTS.com
  119. 119. caelum.com.br
  120. 120. egenial.com.br
  121. 121. Entenda os browsers Entenda HTTP Arquiteturas Mundo Assíncrono Mundo não Relacional
  122. 122. Entenda os browsers Entenda HTTP Arquiteturas Mundo Assíncrono Mundo não Relacional
  123. 123. Entenda os browsers Entenda HTTP Arquiteturas Mundo Assíncrono Mundo não Relacional
  124. 124. Entenda os browsers Entenda HTTP Arquiteturas Mundo Assíncrono Mundo não Relacional
  125. 125. Entenda os browsers Entenda HTTP Arquiteturas Mundo Assíncrono Mundo não Relacional
  126. 126. Obrigado! www.slideshare.net/akitaonrails fabio.akita@gonow.com.br

×