当前位置:  开发笔记 > 编程语言 > 正文

Rails 4:未缓存页面的小N + 1问题

如何解决《Rails4:未缓存页面的小N+1问题》经验,为你挑选了0个好方法。

我有一些代码生成N + 1数据库查询问题.

只有在未缓存页面时才会出现此问题.页面缓存后,添加.includes实际会导致不必要的数据库调用.我想知道如何解决这个问题.

我的applicaiton_helper.rb包含以下内容:

module ApplicationHelper
  def by(article)
    "By #{article.username} on #{article.created_at.strftime('%B %e, %Y')}"
  end
end

我的article.rb包含:

class Article < ActiveRecord::Base
  belongs_to :user

  def username
    user.username
  end
end

而我的articles_controller.rb包含:

class ArticlesController < ApplicationController
  def index
    @articles = user_signed_in? ? Article.all : Article.all.published.limit(13)
  end
end

有问题的username方法是调用User模型的方法.如前所述,当页面尚未缓存时,这会导致by(article)辅助方法连续调用User模型而不需要任何预先加载.但是,由于我正在缓存我的观点,这种低效只会发生一次.如果我将articles_controller.rb更改为以下内容:

class ArticlesController < ApplicationController
  def index
    @articles = user_signed_in? ? Article.all.includes(:user) : Article.all.published.limit(13).includes(:user)
  end
end

N + 1问题在第一页加载时消失,但是.includes在重新加载页面时我得到了一个不必要的东西.

知道如何解决这个小故障吗?

谢谢!

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有