Хотя R-n-R имеет репутацию медленного , это звучит слишком экстремально, чтобы быть простой проблемой с языком.
Вы должны запустить профилировщик, чтобы точно определить, какие функции работают медленно и почему. Наиболее распространенная вещь, замедляющая работу веб-приложения, - это « n + 1 проблема ». То есть, когда у вас есть n элементов данных в вашей базе данных, приложение выполняет n отдельных запросов к базе данных вместо того, чтобы делать один запрос, который их получает. Но вы не можете знать , пока не запустите профилировщик. ruby-prof - это один из профилировщиков, который я использовал.
Редактирование на основе результатов профиля:
Я твердо верю, что вы можете всегда удалить цикл запроса. Как говорит Майк Вудхаус, способ Rails сделать это - указать отношения между вашими таблицами с помощью has_many или другой ассоциации, а затем позволить rails автоматически генерировать объединение таблиц, это ясно , быстрый и "рельсовый путь". Но если вы начинаете с голого SQL или если ассоциации не работают в этом случае, вы можете просто сгенерировать соответствующие объединения самостоятельно. И если ничего не помогает, вы можете создать представление или денормализованную таблицу, в которой хранятся результаты, которые ранее были найдены с помощью цикла. В самом деле, тот факт, что вы должны выполнять итерации по сгенерированным запросам , может быть признаком того, что в самой структуре вашей таблицы есть некоторые недостатки.
Все это говорит, что если кеширование результатов вашего запроса работает достаточно хорошо для вас, то оставайтесь с этим. Оптимизируйте при необходимости.