Développeur Web RoR

Aller au contenu | Aller au menu | Aller à la recherche

lundi 9 novembre 2009

NewRelic - rails performance de l'application, par semaine

NewRelic vous donne les performances d'une application rails par semaine.

Pour ceux qui ne connaissent pas : lire l'utilité Pour ceux qui veulent mettre à jour leur agent newrelic : voici les étapes :

Updating the Agent

As with any plug-in, when using Subversion it's necessary to blow away the old agent plug-in before reinstalling.

svn rm vendor/plugins/newrelic_rpm
svn commit vendor/plugins -m "removing old version of newrelic"

Then, to install the latest agent:

script/plugin install http://newrelic.rubyforge.org/svn/newrelic_rpm
svn add vendor/plugins/newrelic_rpm
svn commit vendor/plugins -m "upgrading newrelic to version X.X.X"

rien de bien sorcier (même pour les anglophobes)...

Tout ça vient de NewRelic.

La version gratuite est très limité mais bon, c'est sympa de savoir chaque semaine si l'application est performante ou pas...

jeudi 5 novembre 2009

Named_scope pour les performances

Quand on développe des applications web avec RubyOnRails le problème des performances se pose tôt où tard (d'ailleur souvent trop tard).

Par exemple on veut connaitre la liste des produits d'un famille :

Controller :
@family = Family.find(params:id)

Dans la vue :
<% @family.products.each do |p| %>
<%= p.picture.path %>
<% end %>

Et là vous regardez les requêtes au serveur : (2 * @family.products.count) requêtes !

C'est pour ça qu'existe l'option :include dans la méthode find, elle met en cache les objets en relation qui sont spécifiés.

Exemple dans le controller @family = Family.find(params:id, :include => {:products => :picture} )

Et là 1 requête.

Et l'avantage, parce que j'ai eu ce problème, c'est qu'on peut utiliser les named_scope :

named_scope :include_products, :include => {:products => :picture}

Du coup dans le controller :
@family = Family.include_products.find(params:id)

Du coup là c'est nettement plus performant !