Shiny happy people coding

Codons avec le sourire

Faire un profil d'une méthode de "controller" Rails

| Comments

Je me suis retrouvé confronter à une méthode d’un “controller” de Ruby On Rails que je trouvais particulièrement longue sachant qu’elle faisait plus d’une seconde et que ce n’était ni le temps du “render”, ni le temps de la Base de donnée. La meilleure méthode pour optimiser ce genre de méthode, c’est tout simplement de faire un profile du traitement effectué. Mais voilà, comment faire un profile ?

Et bien c’est très simple, il faut utiliser le profiler Ruby (disponible avec le require ‘profiler’). Un fois le require effectué un Profiler__::start_profile, puis un Profiler__::stop_profile englobe le code a profiler. Enfin un Profiler__::print_profile STDOUT permet une sortie du profil dans le STDOUT. Ce qui permet ainsi d’être utilisé comme cela dans notre “controller”.

require 'profiler'
class MyController < ApplicationController
  def my_method
    Profiler__::start_profile
    
    # Mon code à profiler

    Profiler__::stop_profile
    Profiler__::print_profile STDOUT
  end
end

Après une petite étude du code du script de “profiler” fournit par rails dans /script/performance/profiler, j’ai pu constater qu’il existait une gem permettant d’améliorer le “profiling” avec un “profiler” plus rapide et de plus belle sortie, en autre en HTML. Il s’agit de ruby-prof. L’utilisation est là même que précédemment, c’est juste les appels qui sont différent.