2010-10-24 2 views
2

Я использую Rails 3.0.1, HAML 0.3.22 и Mongrel 1.1.5 (и MongoMapper не AR). Я представляю список, и каждый элемент списка является его частичным. Каждый раз, когда страница выводит одну из партиций элементов списка, занимает почти 100X больше времени для рендеринга (и каждый раз она произвольно отличается. Также, разумеется, каждый элемент имеет по существу одни и те же данные).Rails Partial (Rails 3, HAML) произвольно медленный

Любая идея, что здесь происходит? Должен ли я переместить логику в блок, а не на частичный?

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

Ничего страшного в использовании частичного здесь. Для этого они нужны. Что касается медлительности, вы работаете в режиме разработки или производства? Можете ли вы отправить код из частичного, пожалуйста? Кроме того, это может помочь увидеть ваш контроллер и ваш файл макета (application.html.haml). Вы пробовали rpm из newrelic? – stephenmurdoch

+0

Действительно: покажите частичное, и как вы это называете. – nathanvda

ответ

3

6 мс за частичное кажется слишком высокой, но это действительно зависит от что вы делаете внутри partial (любые SQL-запросы?)

Что касается 500 мсек, я заметил такое же поведение в своем приложении. И я потратил некоторое время, чтобы выкопать внутри. И хорошо (в моем случае) это действительно был сборщик мусора Ruby.

Вы можете использовать REE, когда можете точно настроить сборщик мусора (например, здесь http://www.coffeepowered.net/2009/06/13/fine-tuning-your-garbage-collector/).

Вы можете играть с этими номерами и посмотреть, изменится ли поведение вашего приложения. И если так, то обвиняйте GC.

-1

Возможно, это будет быстрее, если вы поместите его в одну партию?

Я имею в виду, чтобы поместить его в

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

частичный, который называется 1 раз .. а не в 1000 раз ...

-1

Put в .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 ~/.bashrc 
$> rails s 

В зависимости от того, что ваша проблема, это может сделать рендеринг ваших партиалы быстрее (в моем случае, среднее время рендеринга получил x3 быстрее).