Die Anzahl der ausgegebenen SQLs steigt proportional zur Anzahl der zu verarbeitenden Daten. Dieses Problem wirkt sich auf die Leistung aus und sollte behoben werden. Als Analogie höre ich oft, dass das N + 1-Problem darin besteht, dass Sie beim Kauf vieler Produkte zum Einkaufen nur für jeden Artikel bezahlen.
Es ist eine Bibliothek, die "N + 1 Probleme" findet.
Gemfile
group :development do
  gem 'bullet'
end
Bundle installieren. Einstellen.
config/environments/development.rb
Rails.application.configure do 
 #Unterwegs weggelassen
  config.after_initialize do
    Bullet.enable = true #Aktiviere Bullet Gem
    Bullet.alert = true #Popup-JavaScript-Warnung im Browser
    Bullet.bullet_logger = true #Aufzählungsprotokolldatei (Rails.root/log/bullet.Log)
    Bullet.console = true #Warnung Browser-Konsole.Im Protokoll aufzeichnen
    Bullet.rails_logger = true #Fügen Sie Warnungen direkt zu Rails-Protokollen hinzu
  end
end
Wenn Sie eine Kugel verwenden, werden ein Warnbildschirm und ein Protokoll angezeigt.
Stellen Sie beispielsweise die Beziehung zwischen Benutzern und Posts eins zu viele ein.
user.rb
class User < ApplicationRecord
  has_many :posts
end
post.rb
class Post < ApplicationRecord
  belongs_to :user
end
Gibt den Benutzernamen für alle Beiträge aus.
Post.all.each do |post|
  puts post.user.name
end
USE eager loading detected
Psot => [:user]
Add to your finder::incluedes => [:user]
Sie sehen solche Protokolle und Warnmeldungen. Deshalb,
Post.inculudes(:user).each do |post|
  puts post.user.name
end
Wenn ja, ist es OK.
Recommended Posts