Сократите поиск редко меняющейся информации в нижнем колонтитуле / Rails 3 - PullRequest
0 голосов
/ 01 марта 2011

У меня есть вопрос по оптимизации. Это не моя ситуация, но для целей вопроса этот пример подходит лучше:

Допустим, у вас есть приложение, которое отображает ваши ежемесячные события. Эта информация редко меняется - раз в месяц. Он отображает 5 спец., Но для каждого спец. Нужно отображение такой информации:

Product.name
Product.manufacturer.name
Store.shipping_address.address_line_1
Store.shipping_address.address_line_1
Store.shipping_address.city
Store.shipping_address.state
Store.shipping_address.zip
Store.phone_number.area_code
Store.phone_number.phone_number

При правильно настроенных ассоциациях вы в конечном итоге сделаете 5 запросов к БД. (1, чтобы получить все специальные предложения, 1 для адреса, 1 для телефона, 1 для продукта, 1 для производителя). В этом примере - shipping_address и phone_number - это методы, настроенные в модели Store, которые выполняют поиск полиморфных моделей адреса и номера телефона, которые имеют отношение «1 ко многим» к категории модели (информация о хранении, такая как доставка или оплата, или телефон или факс). )

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

Каков наилучший способ оптимизировать это / ускорить его?

1 Ответ

1 голос
/ 02 марта 2011

Суть в том, что вам нужно получить эти данные в какой-то момент - от этого никуда не деться. Но вы можете минимизировать количество запросов, используя энергичную загрузку и кэширование.

Вот официальное руководство по загрузке:

http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

Стремительная загрузка сведет к минимуму количество запросов, но вы по-прежнему обращаетесь к базе данных. Поэтому, чтобы избежать выполнения этих запросов при каждом запросе, я бы определенно кэшировал данные на каком-то уровне. Rails предлагает различные стратегии кэширования. Кэширование фрагментов может быть отличным решением здесь. Вот более подробная информация о кешировании:

http://guides.rubyonrails.org/caching_with_rails.html

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