我大约一个月前开始工作,我非常接近完成我的第一个项目。我有一些模型需要在每个页面上,因为我在导航栏,下拉菜单和页脚(如产品等)上使用他们的数据。 事情是我注意到我的应用程序加载了太多活动记录,我想知道是否有任何优化。
我在ApplicationController上使用before_action来加载这些活动记录;
before_action :set_constants, except: %i[destroy]
def set_constants
@main_contents = MainContent.all
@abouts = About.all
@products = Product.all
@services = Service.all
@policies = Policy.all
@comm = Communication.first
end
我只是想知道这没关系吗?还是有另一种方法可以做到这一点,因为我几乎每一页都需要这些模型。
答案 0 :(得分:0)
如果您需要在任何地方使用这些数据,可以在ApplicationController中加载它们。
您可以使用Rails.cache.fetch在查询中使用低级缓存来提高性能。
您可以使用rails dev:cache
命令在开发中启用临时缓存。
答案 1 :(得分:0)
好像我得到了解决方案。 我使用低级缓存来实现这一目标。 我们走了;
global move_right
然后我在创建或更新新模型时清除了缓存。(我在每个控制器上都这样做了)
def set_constants
@main_contents = fetch_main_cache(MainContentsController, MainContent)
@abouts = fetch_main_cache(AboutsController, About)
@products = fetch_main_cache(ProductsController, Product)
@services = fetch_main_cache(ServicesController, Service)
@policies = fetch_main_cache(PoliciesController, Policy)
@comm = fetch_main_cache_with_query(CommunicationsController, Communication, 'first').first
end
def fetch_main_cache(controller, model)
fetch_main_cache_with_query controller, model, 'all'
end
def fetch_main_cache_with_query(controller, model, query)
Rails.cache.fetch(controller.controller_name + '_main_cache') do
model.send query
end
end
def clear_main_cache
Rails.cache.delete controller_name + '_main_cache'
end