У нас есть представление Rabl, основанное на действии Rails с вложенными дочерними элементами в такой структуре:
:foo has many :bars
:bar has many :baz
Это означает, что наше представление rabl может выглядеть примерно так:
collection @foo
attributes (#whatever)
child(:bar) {attributes :baz}
Это прекрасно работает, за исключением того, что Rabl выполняет новый запрос на загрузку каждого из объектов bar, а также каждого из объектов baz (всего до 7 объектов baz). Запрос, создающий исходную коллекцию, возвращается менее чем за 100 мс, но общее время рендеринга занимает более 8 секунд и включает около 30 дополнительных запросов на foo
запись. Я пытался использовать синтаксис includes
для предварительной загрузки связанных строк, чтобы Rabl не нужно было их перезагружать, но, похоже, он просто игнорирует отправленную информацию.
Я ищу идею о том, как я могу оптимизировать эту операцию, чтобы мы могли получить от нее максимально возможную производительность. Я не совсем уверен, как правильно атаковать отсюда.
Заранее спасибо.
includes
? Показывает ли консоль сервера предварительную выборку ассоциаций в начале? - person lulalala   schedule 18.10.2012