我有一个优化问题。这不是我的情况,但出于问题的目的,这个例子更适合:
假设您有一个显示每月特价的应用。这些信息很少发生变化 - 每月一次。它显示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是在商店模型中设置的方法,用于查找与模型类别具有1对多关系的地址和电话号码的多态模型(保留信息,如发货与结算,或电话与传真) )
这是问题,假设您有5个特价,它们可能在各个商店,因此您需要在每个页面上进行5次查询以显示此信息,包括首页。
优化/加速它的最佳方法是什么?
答案 0 :(得分:1)
最重要的是,您确实需要在某个时刻检索这些数据 - 没有解决这个问题。但是,您可以使用预先加载和缓存来最小化查询数量。
以下是热切加载的官方指南:
http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations
急切加载会最大限度地减少查询次数,但您仍然会访问数据库。因此,为了避免在每个请求上运行这些查询,我肯定会在某种程度上缓存数据。 Rails提供各种缓存策略。片段缓存可能是一个很好的解决方案。以下是有关缓存的更多详细信息: