1 / 77

Merb

Merb. Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK www.dtsato.com. Merb?. Rails não escala!. . Aviso:. Eu sou fã de Rails. Lembram?. Não é bem assim…. Rails = Revolução. Mudou a forma de encarar o desenvolvimento Web Opinionated: Testes Migrations

senwe
Download Presentation

Merb

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK www.dtsato.com

  2. Merb?

  3. Rails não escala!

  4. Aviso: Eu sou fã de Rails

  5. Lembram?

  6. Não é bem assim…

  7. Rails = Revolução • Mudou a forma de encarar o desenvolvimento Web • Opinionated: • Testes • Migrations • Convention over Configuration • DRY

  8. Opinião forte • Estrutura da aplicação

  9. Opinião forte • Estrutura da aplicação • MVC

  10. Opinião forte • Estrutura da aplicação • MVC • AJAX: Script.aculo.us / Prototype

  11. Opinião forte • Estrutura da aplicação • MVC • AJAX: Script.aculo.us / Prototype • ORM: ActiveRecord

  12. Opinião forte • Estrutura da aplicação • MVC • AJAX: Script.aculo.us / Prototype • ORM: ActiveRecord • Testes: Test::Unit • unit / functional / integration

  13. Opinião forte • Estrutura da aplicação • MVC • AJAX: Script.aculo.us / Prototype • ORM: ActiveRecord • Testes: Test::Unit • unit / functional / integration • Mailer/ActiveResource/ActiveSupport/…

  14. Perfeito para Iniciantes • Modelo de Dreyfus: • Iniciante  Práticas e Regras independentes de contexto

  15. Perfeito para Iniciantes • Modelo de Dreyfus: • Iniciante  Práticas e Regras independentes de contexto • Competente  Contexto é importante, mas sem prioridade

  16. Perfeito para Iniciantes • Modelo de Dreyfus: • Iniciante  Práticas e Regras independentes de contexto • Competente  Contexto é importante, mas sem prioridade • Proficiente  Contexto interpretado de forma holística

  17. Perfeito para Iniciantes • Modelo de Dreyfus: • Iniciante  Práticas e Regras independentes de contexto • Competente  Contexto é importante, mas sem prioridade • Proficiente  Contexto interpretado de forma holística • Expert  Decisões baseadas na intuição

  18. Perfeito para Iniciantes • Modelo de Dreyfus: • Iniciante  Práticas e Regras independentes de contexto • Competente  Contexto é importante, mas sem prioridade • Proficiente  Contexto interpretado de forma holística • Expert  Decisões baseadas na intuição • Mestre  Ações sem prestar atenção na consciência

  19. Mas e se quero algo diferente? Fugir do padrão é difícil, mas não impossível

  20. Merb • Framework web MVC em Ruby • Desenvolvido pelo Ezra • EngineYard • Brincando com Mongrel Handlers • Mongrel + Erb

  21. Menos mágica • Symbol.to_proc (&:color)

  22. Menos mágica • Symbol.to_proc (&:color) • returning {}

  23. Menos mágica • Symbol.to_proc (&:color) • returning {} • Active Support:

  24. Menos mágica • Symbol.to_proc (&:color) • returning {} • Active Support: • distance_of_time_in_words_to_now

  25. Menos mágica • Symbol.to_proc (&:color) • returning {} • Active Support: • distance_of_time_in_words_to_now • auto_link_email_addresses

  26. Menos mágica • Symbol.to_proc (&:color) • returning {} • Active Support: • distance_of_time_in_words_to_now • auto_link_email_addresses • cycle

  27. Flexível • merb-core

  28. Flexível • merb-core • merb-more • merb-action-args /merb-assets • merb-builder / merb-cache • merb-freezer / merb-gen • merb-haml / merb-mailer • merb-parts / merb-slices

  29. Rack • Ebb • Evented Mongrel • FastCGI • Mongrel • Thin • Webrick

  30. Leve • OBS: • Linhas de Código desconsiderando comentários e linhas em branco • Rails 2.1.0 vs. Merb-0.9.3 • Script adaptado de code_statistics.rb (usado no Rails para fazer rake:stats)

  31. Leve • OBS: • Linhas de Código desconsiderando comentários e linhas em branco • Rails 2.1.0 vs. Merb-0.9.3 • Script adaptado de code_statistics.rb (usado no Rails para fazer rake:stats)

  32. Leve • OBS: • Linhas de Código desconsiderando comentários e linhas em branco • Rails 2.1.0 vs. Merb-0.9.3 • Script adaptado de code_statistics.rb (usado no Rails para fazer rake:stats)

  33. Rápido • Thread-safe

  34. Rápido • Thread-safe • Consegue atender requisições sem bloquear

  35. Rápido • Thread-safe • Consegue atender requisições sem bloquear • “Benchmark” (replies/s): Fonte: http://www.trawlr.com/items/5757847-rails-or-merb-what-s-best-for-you

  36. Rápido • Thread-safe • Consegue atender requisições sem bloquear • “Benchmark” (replies/s): Fonte: http://www.trawlr.com/items/5757847-rails-or-merb-what-s-best-for-you

  37. Rápido • Thread-safe • Consegue atender requisições sem bloquear • “Benchmark” (replies/s): Fonte: http://www.trawlr.com/items/5757847-rails-or-merb-what-s-best-for-you

  38. A vida fora do Mutex

  39. O famoso exemplo • Upload de arquivo: • Operação demorada • Rails padrão bloqueia até terminar de responder

  40. O famoso exemplo • Upload de arquivo: • Operação demorada • Rails padrão bloqueia até terminar de responder • Isso significa: • Mongrel não responde mais nenhuma requisição!

  41. O famoso exemplo • Upload de arquivo: • Operação demorada • Rails padrão bloqueia até terminar de responder • Isso significa: • Mongrel não responde mais nenhuma requisição! • Soluções: • BackgroundDb • Custom Mongrel Handler • …

  42. Lock Rails (dispatcher.rb)

  43. Lock Rails (dispatcher.rb)

  44. Lock • Rails segura o mutex antes de: • Determinar o roteamento • Atender a requisição

  45. Lock • Rails segura o mutex antes de: • Determinar o roteamento • Atender a requisição • Algoritmo de rotas no Rails: • Não thread-safe • ~ 1100 linhas de código complexo

  46. Lock • Rails segura o mutex antes de: • Determinar o roteamento • Atender a requisição • Algoritmo de rotas no Rails: • Não thread-safe • ~ 1100 linhas de código complexo • ActiveRecord

  47. Lock • Algoritmo de rotas no Merb: • ~ 600 linhas de código complexo • Thread-safe • Não é executado dentro do mutex

  48. Lock • Algoritmo de rotas no Merb: • ~ 600 linhas de código complexo • Thread-safe • Não é executado dentro do mutex • Não acoplado ao ActiveRecord

  49. Lock • Algoritmo de rotas no Merb: • ~ 600 linhas de código complexo • Thread-safe • Não é executado dentro do mutex • Não acoplado ao ActiveRecord

More Related