Workshop Performance Rails
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Workshop Performance Rails

on

  • 1,863 views

Slides do Workshop apresentado na Ultramaratona de Software Livre. 07/11/2009

Slides do Workshop apresentado na Ultramaratona de Software Livre. 07/11/2009

Statistics

Views

Total Views
1,863
Views on SlideShare
1,705
Embed Views
158

Actions

Likes
2
Downloads
21
Comments
0

5 Embeds 158

http://vp.blog.br 126
http://pellegrino.posterous.com 14
http://flavors.me 10
http://archive.vp.blog.br 7
http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Workshop Performance Rails Presentation Transcript

  • 1. Otimizando aplicações rails Client Side & Server Side Vitor Pellegrino Petrobrás Distribuidora @pellegrino http://vp.blog.br
  • 2. quem? Vitor Pellegrino
  • 3. quem? Engenheiro de Software Vitor Pellegrino
  • 4. quem? Engenheiro de Software Petrobrás Distribuidora Vitor Pellegrino
  • 5. quem? Engenheiro de Software Petrobrás Distribuidora Vitor Pellegrino video.globo.com
  • 6. quem? Engenheiro de Software Petrobrás Distribuidora Vitor Pellegrino video.globo.com Metodologias Ágeis
  • 7. quem? Engenheiro de Software Petrobrás Distribuidora Vitor Pellegrino video.globo.com Railer desde 2006 Metodologias Ágeis
  • 8. quem? Engenheiro de Software Petrobrás Distribuidora #horaextra Vitor Pellegrino video.globo.com Railer desde 2006 Metodologias Ágeis
  • 9. Agenda • Introdução • Plugins e Libraries • Cache Distribuído • Otimizações built-in do Rails • Links
  • 10. Introdução
  • 11. Responsiveness
  • 12. Responsiveness Quantidade de tempo necessária para se carregar uma página
  • 13. Como seus usuários enchergam a sua aplicação
  • 14. Interface Como seus usuários enchergam a sua aplicação
  • 15. Interface Como seus usuários enchergam a sua aplicação
  • 16. Interface Mágica Como seus usuários enchergam a sua aplicação
  • 17. Interface Mágica Como seus usuários enchergam a sua aplicação
  • 18. Otimização prematura http://www.redbubble.com/people/suranyami/t-shirts/2547056-2-premature-optimization-is-the-root-of-all-evil-donald-knuth
  • 19. NÃO FAÇA ISSO!
  • 20. NÃO FAÇA ISSO!
  • 21. Otimização prematura • Na maioria dos casos você não vai precisar • Otimize baseado em fatos • Analise primeiro • Custo x benefício
  • 22. http://
  • 23. Safari
  • 24. Google chrome
  • 25. http://www.bombe.tv/blog/wp-content/uploads/2009/07/homer_the_new_fail_whale_by_edwheeler.jpg Rails escala?
  • 26. describe Rails do context ‘when done correctly’ do it { Rails.should scale } end end
  • 27. https://www.ravelry.com/
  • 28. • 10 million requests a day hit Rails (AJAX + RSS + API) • 3.6 million pageviews per day • 2.3 million knitting/ crochet projects, 50,000 new forum posts each day, 19 million forum posts, 13 million private http://highscalability.com/blog/2009/9/22/how-ravelry-scales-to-10-million-requests-using-rails.html
  • 29. • 10 million requests a day hit Rails (AJAX + RSS + API) • 3.6 million pageviews per day • 2.3 million knitting/ 1 desenvolvedor rails crochet projects, 50,000 new forum posts each day, 19 million forum posts, 13 million private http://highscalability.com/blog/2009/9/22/how-ravelry-scales-to-10-million-requests-using-rails.html
  • 30. rails tools that help you scale
  • 31. Ingredients • Git • Rails • Ruby 1.8.x • Firefox • Firebug • YSlow
  • 32. Ingredients • gem sources -a http:// gems.github.com • sudo gem install gemcutter • sudo gem tumble
  • 33. Asset Packager • Comprime javascript e CSS em aplicações rails em produção.
  • 34. Hands on • ./script/plugin install git:// github.com/sbecker/ asset_packager.git • rake asset:packager:create_yml
  • 35. Sprockets • getsprockets.org • Concatenador e Gerenciador de dependencias javascript • provide • request
  • 36. Hands on • sudo gem install --remote sprockets • script/plugin install git://github.com/ sstephenson/sprockets-rails.git • edite o config/routes.rb • SprocketsApplication.routes(map)
  • 37. Tools •Bullet • http://github.com/flyerhzm/bullet/ • Queries N+1 • Queries
  • 38. Hands on! • Código do blog • Instalar o plugin do bullet • http://github.com/flyerhzm/bullet/ • Simular query N+1 • <%= post.comments.collect(&:author) %> • Simular counter_cache • <%= post.comments.size %>
  • 39. Bullet • Indica lugares possíveis de otimização • N+1 queries • Counter cache
  • 40. Rails Indexes • Rails Indexes • http://github.com/eladmeidar/ rails_indexes • Auxilia na criação de índices
  • 41. Hands on • script/plugin install git://github.com/ eladmeidar/rails_indexes.git • rake db:show_me_a_migration • rake db:show_me_ar_find_indexes
  • 42. Rails indexes • Índices são muito importantes • ... e muito esquecidos • rake db:show_me_a_migration #ftw
  • 43. Scrooge • Otimização do SQL gerado pelo rails • Busca apenas as colunas que vão ser usadas. • http://github.com/methodmissing/ scrooge
  • 44. Hands on • sudo gem install slim_scrooge • # config/environment.rb • config.gem 'slim_scrooge'
  • 45. Scrooge • Pode representar um ganho muito significativo dependendo das queries • Fire and forget.
  • 46. Rack-bug • Debug toolbar • http://github.com/brynary/rack-bug • Inspeciona o que está acontecendo durante um request.
  • 47. Hands on • # config/environments/development.rb • config.middleware.use "Rack::Bug" • script/plugin install git://github.com/brynary/rack-bug.git • http://localhost:3000/__rack_bug__/bookmarklet.html
  • 48. Rack-bug • Visualização completa do que acontece na aplicação • Depurar memória gasta nos seus processos rails.
  • 49. Asset Packager e Sprockets • Ganho significativo em performance client-side • Use it now :)
  • 50. Cache distribuído
  • 51. Cache distribuído Arquitetura
  • 52. Cache distribuído • Redução do número de acessos ao banco de dados • Compartilhamento de informações entre instâncias de rails • Funciona como se fosse um hash em memória
  • 53. Memcached • Cache distribuído open source • Utilizado na maioria dos sites de grande conteúdo • Facil integração com rails.
  • 54. Hands on • sudo apt-get install memcached • config/environments • config.action_controller.perform_caching = true • config.cache_store = :mem_cache_store • memcached -vv
  • 55. Hands on • Rails.cache.fetch(“helloworld”) { “Hello world”} • Rails.cache.delete(“helloworld”) • Rails.cache.fetch(@post) { @post }
  • 56. Memcached • Muito utilizado em aplicações rails • É possível serializar objetos inteiros na memória • Fácil Integração • Escalável por ser distribuído
  • 57. Otimizações rails built-in
  • 58. Page Caching
  • 59. Page Caching • Cache de todo o conteúdo da página • Arquivo estático HTML • Apache (+1000/segundo) • Evita o acesso desnecessário ao servidor
  • 60. Hands on • caches_page :index • expire_page :action => :index • config/environment.rb • config.action_controller.perform_caching = true • config.action_controller.page_cache_directory = RAILS_ROOT + "/public/cache " # opcional
  • 61. Page Caching • Conteúdo dinâmico?
  • 62. Page Caching • Conteúdo dinâmico? Javascript!
  • 63. Page Caching • def update_status render_inline “hello world” end • <%= link_to_remote “dinamico” , :url => { :action => “update_status”} , :update => {“status” } %>
  • 64. Page Caching • Use SEMPRE que possível • Cuidado com a expiração do cache • Ainda é possível usar javascript :)
  • 65. Action Caching
  • 66. Action Caching • caches_action :edit • expires_action :edit
  • 67. Action Caching • Quando se deseja utilizar filters • Controle de acesso • Quando não se pode utilizar page caching • Conditional Action Caching • Action Caching without layouts
  • 68. Fragment Caching
  • 69. Fragment Caching • Trechos de um layout • Tag Cloud • Recent posts
  • 70. Fragment Caching • cache(key) do ... end • fragment_exists?(key) • expire_fragment(key)
  • 71. Fragment Caching • Pedaços da tela • Cuidado para não executar a query ainda que a view esteja cacheada • fragment_exists?
  • 72. Sweepers
  • 73. Sweepers • Objeto compartilhado entre os controllers • Centraliza expiração de cache • ActiveRecord observer
  • 74. Resumo
  • 75. Built-in Rails • Rails traz muitas possibilidades de otimização por default • Page > Action > Fragment caching • Memcached
  • 76. Resumo
  • 77. Não otimize prematuramente
  • 78. É preciso entender a arquitetura como um todo para se otimizar de maneira eficiente
  • 79. São as arquiteturas e não as linguagens que são escaláveis.
  • 80. Sim, Rails escala. :)
  • 81. Links
  • 82. http://railslab.newrelic.com/scaling-rails/
  • 83. http://railscasts.com/tags/1
  • 84. http://developer.yahoo.com/performance/
  • 85. http://www.newrelic.com/
  • 86. Obrigado! Vitor Pellegrino http://vp.blog.br http://www.twitter.com/pellegrino