Частично Rails (Rails 3, HAML) сколь угодно медленно - PullRequest
2 голосов
/ 24 октября 2010

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

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

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)

Ответы [ 3 ]

3 голосов
/ 16 ноября 2010

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

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

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

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

0 голосов
/ 19 февраля 2015

Вставьте .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

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

0 голосов
/ 24 октября 2010

Может быть, быстрее, если вы поместите его в один частичный?

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

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

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

...