Bonjour,
dans le cadre d'un stage j'ai developpé une application intranet avec Rails, mais j'ai un gros problème de performances.
Est-ce que le fait d'utiliser des variables de session augmente les temps de réponse ?
Merci
Bonjour,
dans le cadre d'un stage j'ai developpé une application intranet avec Rails, mais j'ai un gros problème de performances.
Est-ce que le fait d'utiliser des variables de session augmente les temps de réponse ?
Merci
Bonjour,
Heuh... C'est pas vraiment aux variables de session que je penserai en premier lieu. D'ailleurs, il vaut mieux d'ailleurs éviter de trop charger la variable session. Se contenter d'y stocker un id pointant sur une ligne de table en base par exemple.
Pour les perfs, je m'interrogerais (dans l'ordre) :
* Sur le serveur Web utilisé :
Utiliser mongrel de préférence à Webrick. Le configurer en mode cluster de charge, surtout sur les architectures multiprocesseurs, avec nginx ou Apache en frontal.
* Sur l'utilisation des mécanismes de cache : fragment, page, contrôleur, ....
Savoir aussi que l'interpréteur Ruby / Rails est pour le moment légèrement moins performant sous Windows que sous Linux.
Côme
ok, merci
l'hébergement est imposé, je suis sous windows 2003 avec apache2, je vais continuer à optimiser le code.
Salut,
Tu utilises bien Mongrel ? Il est beaucoup plus rapide que Webrick (de mémoire il me semble que c'est environ 2x plus rapide en moyenne).
Tu as bien vérifié aussi que tu étais en environnement de production et non pas développement ?
Penses aussi à utiliser le plus possible l'option 'include' dans tes finds, surtout si tu as beaucoup de modèles dépendant d'autres. Par exemple :
Soit 2 modèles : User et Document (User has_many :documents, Document: belongs_to :user)
Si tu veux lister les documents avec leurs users respectifs :
Code Vue : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <% for doc in @documents %> <%= doc.title %> appartient à <%= doc.user.name %> <% end %>La différence peut être importante si tu as beaucoup de documents à lister
Code Controlleur : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 # Génére n+1 requêtes (n = nombre de documents) : 1 pour le document puis 1 pour recuperer le user pour chaque document @documents = Document.find :all # Génére 1 requête @documents = Document.find :all, :include => :user
Enfin, peux-tu donner quelques chiffres pour avoir une idée ? Quel est ton hardware, tes temps de réponse en moyenne, etc. ?
Toute la documentation Ruby on Rails : gotapi.com/rubyrails
Mes articles :
> HAML : langage de template pour Ruby on Rails
je n'ai pas testé mongrel car apache m'est imposé, je fais des tests cette après midi et j'vous tiens au courant.
Pour ce qui est des requetes, pour la plupart j'ai utilisé find_by_sql car elles sont trop complexes pour ror
Heuuu...
Mongrel ne s'utilise pas en frontal de toute façon, il est toujours couplé à un serveur qui lui dispatch les requêtes (Apache+mod_proxy, nginx, lighty, etc.)
Actuellement tu utilises quoi ? Apache + FastCGI ?
Si tu es en CGI simple (pas FastCGI), ne cherche pas plus loin !! c'est horriblement lent car il est obligé de recharger tout Rails à chaque requête.
Et pour l'environnement, tu as vérifié que tu étais en production ?
Toute la documentation Ruby on Rails : gotapi.com/rubyrails
Mes articles :
> HAML : langage de template pour Ruby on Rails
Je plussoie Taum pour le mode production qui améliore pas mal les perfs et surtout, surtout le CGI, horriblement lent ( maintenant j'ai du Lighttpd + FastCGI, ça va mieux )
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager