[RUBY] [Débutant] Découvrez le problème N + 1! Comment utiliser Bullet

Quel est le problème N + 1?

Le nombre de SQL émis augmente proportionnellement au nombre de données à traiter. Ce problème affecte les performances et doit être résolu. Par analogie que j'entends souvent, le problème N + 1 est que lorsque vous achetez beaucoup de produits pour faire du shopping, vous ne payez que pour chaque article.

Qu'est-ce que la balle

C'est une bibliothèque qui trouve "N + 1 problèmes".

Méthode d'introduction

Gemfile


group :development do
  gem 'bullet'
end

installation groupée. Ensemble.

config/environments/development.rb



Rails.application.configure do 
 #Omis en chemin

  config.after_initialize do
    Bullet.enable = true #Activer la gemme Bullet
    Bullet.alert = true #Alerte JavaScript contextuelle dans le navigateur
    Bullet.bullet_logger = true #Fichier journal de balle (Rails.root/log/bullet.Journal)
    Bullet.console = true #Console du navigateur d'avertissement.Enregistrer dans le journal
    Bullet.rails_logger = true #Ajouter des alertes directement aux journaux Rails
  end
end

Solution

Si vous utilisez bullet, un écran d'avertissement et un journal apparaîtront.

Par exemple, établissez la relation entre les utilisateurs et les publications un à plusieurs.

user.rb


class User < ApplicationRecord
  has_many :posts
end

post.rb


class Post < ApplicationRecord
  belongs_to :user
end

Affiche le nom d'utilisateur pour tous les articles.

Post.all.each do |post|
  puts post.user.name
end
USE eager loading detected
Psot => [:user]
Add to your finder::incluedes => [:user]

Vous verrez ces journaux et messages d'avertissement. Donc,

Post.inculudes(:user).each do |post|
  puts post.user.name
end

Si c'est le cas, tout va bien.

Recommended Posts

[Débutant] Découvrez le problème N + 1! Comment utiliser Bullet
Comment utiliser JUnit (débutant)
Comment utiliser la méthode form_with
Comment utiliser la classe wrapper
[Java] Comment utiliser la méthode toString ()
Etudier comment utiliser le constructeur (java)
[Traitement × Java] Comment utiliser la boucle
[Traitement × Java] Comment utiliser la classe
[Traitement × Java] Comment utiliser la fonction
[Java] Comment utiliser la classe Calendar
Comment utiliser le module caméra OV7725 (ESP32-WROVER-B)
Sortie de la façon d'utiliser la méthode slice
Comment utiliser la méthode replace () (Java Silver)
[Introduction à Ruby] Comment utiliser la méthode slice
Comment utiliser Map
Comment utiliser rbenv
Comment utiliser fields_for
Comment utiliser java.util.logging
Comment utiliser la carte
Comment utiliser collection_select
Comment utiliser Twitter4J
Comment utiliser active_hash! !!
Comment utiliser MapStruct
Comment utiliser TreeSet
[Comment utiliser l'étiquette]
Comment utiliser l'identité
Comment utiliser le hachage
Comment utiliser Dozer.mapper
Comment utiliser Gradle
Comment utiliser org.immutables
Comment utiliser java.util.stream.Collector
Comment utiliser VisualVM
Comment utiliser Map
[Rails] Je ne sais pas comment utiliser le modèle ...
[Débutant] Comment utiliser la conception Modifier les paramètres depuis l'introduction
Comment utiliser l'API Chain
[Java] Comment utiliser Map
Comment utiliser Queue avec priorité
Ne sous-estimez pas le problème N + 1!
[Rails] Comment utiliser enum
Comment utiliser le retour Ruby
[Rails] Comment utiliser enum
Comment utiliser @Builder (Lombok)
Comment utiliser la classe Java
Comment utiliser Big Decimal
[Java] Comment utiliser removeAll ()
Comment utiliser String [] args
Comment utiliser la jonction de rails
Comment utiliser Java Map
Ruby: Comment utiliser les cookies
Comment utiliser Dependant :: Destroy