Valium le gem qui allège votre CPU et votre mémoire lors d'une récupération limitée des champs d'un objet

Il arrive souvent que l'on ai besoin que de certains champs lors de la récupération d'objets sérialisés en base de données.

Par exemple imaginons que nous ayons 10000 utilisateurs (avec email, adresse, nom, prenom, ...) et que nous souhaitons afficher la liste de ce qui ce sont inscrit depuis 2 mois, seul l'email nom et prénom nous intéresse.

On pourrait faire ceci :

User.where("created_at > ?", 2.months.ago).each{ |u|

  # u est de la classe User

  print [u.name, u.firstname, u.email].join(" ")

}

Avec valium on peut faire ça (et on a intérêt) :

User.where("created_at > ?", 2.months.ago)[:email, :name, :firstname].each{ |u|

  # u est un array

  print [u[1], u[2], u[0]].join(" ")

}

Doc et source : https://github.com/ernie/valium#readme

La page des benchmarks est aussi intéressante (sachant qu'en plus les tests ont été fait avec ruby 1.9.3 et Rubyonrails 3.2)