ActiveReload pra melhorar a performance de projetos rails

Embalado um pouco com o último post que era pra melhorar a performance do seus test vou falar um pouquinho de outra gem que também melhora a performance, mas agora em modo de desenvolvimento.

A Gem ActiveReload do Robert Pankowecki faz uma boa diferença em projetos grande com muitos arquivos, pois quando você sobe um servidor em modo de desenvolvimento ele carrega todos os arquivos como se fosse no modo de produção e quando você alterar suas classes ele faz o reload somente dos arquivos alterados, logo o tempo pra de carregamento das páginas diminui bastante. É compatível com ruby >= 1.8.7 e já foi testado com rails >= 3.0.10.

Aqui o pessoal publicou um vídeo comparativo em um projeto spree, que em modo de desenvolvimento pode ficar muito lento devido as extensões.

Para instalar é bem simples, basta adicionar no seu Gemfile e então rodar o bundle pra adicionar a dependência.

Gemfile
gem 'active_reload'

Você ainda pode fazer uso de duas notificação disponíveis, são elas:

active_reload.set_clear_dependencies_hook_replaced evento disparado quando a gem altera o hook original do rails pra recarregar o código

initializers/active_reload.rb
ActiveSupport::Notifications.subscribe("active_reload.set_clear_dependencies_hook_replaced") do |*args|
  event = ActiveSupport::Notifications::Event.new(*args)
  msg = event.name
  # Ubuntu: https://github.com/splattael/libnotify, Example: Libnotify.show(:body => msg, :summary => Rails.application.class.name, :timeout => 2.5, :append => true)
  # Macos: http://segment7.net/projects/ruby/growl/
  puts Rails.logger.warn(" --- #{msg} --- ")
end

active_support.dependencies.clear este evento é disparado quando a gem faz o reload do código

initializers/active_reload.rb
ActiveSupport::Notifications.subscribe("active_support.dependencies.clear") do |*args|
  msg = "Code reloaded!"
  # Ubuntu: https://github.com/splattael/libnotify, Example: Libnotify.show(:body => msg, :summary => Rails.application.class.name, :timeout => 2.5, :append => true)
  # Macos: http://segment7.net/projects/ruby/growl/
  puts Rails.logger.info(" --- #{msg} --- ")
end

Se alguém tiver problemas, dúvidas ou outras dicas postem abaixo nos comentários.