10/04/2019

Optimisation des applications Rails

Rails
Ruby

Rappel de quelques techniques d'optimisation des applications Rails :

  • Evitez les 'N+1' avec Model.includes(:slave_model)

  • Utilisez le gem 'bullet' pour localiser les N+1 à éliminer

  • Créez un 'partial' de votre Model dès qu'il doit être affiché sous forme de lignes dans une table

  • Utilisez <%= render :model, collection: @models %> au lieu de <% @records.each do | record| > <%= render record %> <% end %>

  • Evitez d'instancier des variables à tout bout de champ (surtout dans les vues), c'est gourmant en temps, en occupation mémoire et ça vous rapproche du moment où le GC va se déclencher pour faire le ménage

  • Evitez de créer une variable d'instance (@var) quand vous savez que sa portée restera confinée au périmètre de la méthode dans laquelle elle est

  • Utilisez le gem 'scout_apm' pour identifier facilement les points à optimiser de votre application

  • SQL: Quand une requête est longue, jouer là dans la console en y ajoutant .explain pour voir comment elle est interprétée par le moteur de base de données

  • SQL: Utilisez .ids dans les requête IN. ex: Mesure.includes(:device).where(device_id: @devices.ids) est beaucoup plus rapide que Mesure.includes(:device).where(device: @devices)

  • Les dernières versions de Ruby et du framework Rails sont généralement plus rapides. Ca vaut le coup de migrer une application en Rails 4 vers 5 ou de passer de Ruby 2.4 à Ruby 2.6. Sans parler de la possibilité de profiter des nouveautés ;-)

  • N'utilisez pas l'option '--jit' de Ruby 2.6, elle n'a aucun effet sur la vitesse d'exécution de Rails...