Вызов Rails 2 от одной модели к другой идет медленно - PullRequest
0 голосов
/ 17 февраля 2012

В Rails 2 я пытаюсь оптимизировать производительность загрузки веб-страницы медленно.

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

Если говорить точнее, скажем, медленная модель - это отдел, а я рассчитываю расходы на отдел.Метод затрат должен знать, был ли закрыт квартал, и эта информация находится в другой модели, Квартал

Первый раз, когда Department.expenditures вызывает Quarter.closed?есть доступ к базе данных, и я могу это принять.Но я сделал что-то, чтобы сохранить это в памяти внутри метода модели, чтобы будущие вызовы Quarter.closed?не имеют доступа к базе данных.Код внутри Quarter.closed?теперь работает около 4 микросекунд, но просто вызывает Quarter.closed?изнутри Department.expenditures занимает 400 микросекунд, и с сотнями отделов, которые складываются.

Я мог бы кэшировать значение Quarter.closed внутри глобальной переменной, но это кажется проблематичным.Кто-нибудь знает, что происходит или есть предложения о лучшей практике?

1 Ответ

0 голосов
/ 17 февраля 2012

Не уверен на 100%, относится ли это к вашей проблеме.Но с подобными проблемами времени загрузки во многих случаях энергичная загрузка решает проблему.Вы бы сделали это так:

Department.all(:include => :expenditures)

Я немного не в синтаксисе Rails 2.В Rails 3 вы можете указать include довольно подробно, например:

Category.includes(:posts => [{:comments => :guest}, :tags]).find(1)

Я думаю (но не уверен), что опция: include в Rails 2 допускает аналогичный синтаксис, так что, возможно, это будет работать:

Department.all(:include => [:expenditures => [:quarters]])

(Возможно, здесь понадобятся эксперименты с комбинацией синтаксиса arra / hash)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...