2010-10-24 7 views
2

J'utilise Rails 3.0.1, HAML 0.3.22 et Mongrel 1.1.5 (et MongoMapper non AR). Je rends une liste, et chaque élément de la liste est propre. Chaque fois que la page rend l'un des éléments partiels de la liste prend plus de 100X plus long à rendre (et il est arbitrairement différent à chaque fois.Il va sans dire, chaque élément a essentiellement les mêmes données).Rails Partiel (Rails 3, HAML) arbitrairement lent

Une idée de ce qui se passe ici? Dois-je déplacer la logique dans un bloc plutôt que partielle?

Rendered shared/_head.html.haml (5.6ms) 
Rendered tasks/_incomplete_task.haml (6.2ms) 
Rendered tasks/_incomplete_task.haml (6.4ms) 
Rendered tasks/_incomplete_task.haml (6.9ms) 
Rendered tasks/_incomplete_task.haml (6.2ms) 
Rendered tasks/_incomplete_task.haml (6.0ms) 
Rendered tasks/_incomplete_task.haml (6.1ms) 
Rendered tasks/_incomplete_task.haml (6.4ms) 
Rendered tasks/_incomplete_task.haml (6.2ms) 
Rendered tasks/_incomplete_task.haml (7.0ms) 
Rendered tasks/_incomplete_task.haml (531.6ms) 
Rendered tasks/_incomplete_task.haml (8.0ms) 
Rendered tasks/_incomplete_task.haml (6.8ms) 
Rendered tasks/_incomplete_task.haml (6.5ms) 
Rendered shared/_tasks.html.haml (633.0ms) 
+0

Rien de mal à utiliser un partiel ici. C'est ce qu'ils sont pour. En ce qui concerne la lenteur, êtes-vous en mode développement ou production? Pouvez-vous poster le code de votre partiel s'il vous plaît? En outre, il peut être utile de voir votre contrôleur et votre fichier de disposition (application.html.haml). Avez-vous essayé rpm de newrelic? – stephenmurdoch

+0

En effet: montrer le partiel, et comment vous l'appelez. – nathanvda

Répondre

3

6 msec par partielle semble trop élevé, mais cela dépend vraiment de Que faites-vous à l'intérieur de la partielle (toutes les requêtes SQL là-bas?)

Comme pour 500 msec chose que j'ai remarqué le même comportement dans mon application. Et j'ai investi du temps pour creuser à l'intérieur. Et bien (dans mon cas) c'était vraiment un éboueur Ruby.

Vous pouvez utiliser REE lorsque vous pouvez affiner le garbage collector (par exemple ici http://www.coffeepowered.net/2009/06/13/fine-tuning-your-garbage-collector/).

Vous pouvez jouer avec ces chiffres et voir si le comportement de votre application va changer. Et si oui, alors blâmer le GC.

-1

Peut-être que c'est plus rapide si vous le mettez en un seul partiel?

Je veux le mettre dans un

# tasks/_incomplete_tasks.haml instead of tasks/_incomplete_task.haml 

partielle, qui est appelé 1 fois .. et non 1000 fois ...

-1

Mettre en .bashrc:

export RUBY_GC_HEAP_INIT_SLOTS=1000000 
export RUBY_HEAP_SLOTS_INCREMENT=500000 
export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1 
export RUBY_GC_MALLOC_LIMIT=50000000 

Source, et le serveur de redémarrage

$> source ~/.bashrc 
$> rails s 

En fonction de ce qui est votre problème, cela pourrait rendre le rendu de vos partials plus vite (dans mon cas, le temps de rendu moyen obtenu x3 plus vite).