J'ai appris cette technique il y a un moment et je l'ai trouvée très pratique.
Quand elle est en place, vous pouvez ajouter ?profile=true
à n'importe quelle URL qui atteint un contrôleur. Votre action s'exécutera comme d'habitude, mais au lieu de livrer la page rendue au navigateur, elle enverra une page ruby-prof détaillée et joliment formatée qui montre où votre action a passé son temps.
Tout d'abord, ajoutez ruby-prof à votre Gemfile, probablement dans le groupe de développement :
group :development do
gem "ruby-prof"
end
Ensuite, ajoutez un filtre autour à votre ApplicationController :
around_action :performance_profile if Rails.env == 'development'
def performance_profile
if params[:profile] && result = RubyProf.profile { yield }
out = StringIO.new
RubyProf::GraphHtmlPrinter.new(result).print out, :min_percent => 0
self.response_body = out.string
else
yield
end
Lire la sortie de ruby-prof est un peu un art, mais je vous laisse cela comme exercice.
Note supplémentaire de ScottJShea: Si vous voulez changer le type de mesure, placez ceci :
RubyProf.measure_mode = RubyProf::GC_TIME #exemple
Avant le if
dans la méthode de profil de l'application controller. Vous pouvez trouver une liste des mesures disponibles sur la page ruby-prof. À la date de rédaction de cet article, les flux de données memory
et allocations
semblent être corrompus (voir défaut).