L'essentiel de Ruby on Rails

Comprendre le problème des requêtes N+1

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Après avoir appris à créer des associations, vous devez aborder le problème des requêtes N+1. L'impact des conséquences étant lié à la taille des applications, voyez comment les détecter et les éviter.
03:25

Transcription

Maintenant que vous savez utiliser les associations has_many et has_belongs_to_many, il vous faut connaître le problème sous-jacent des requêtes n+1 Si par exemple, vous vouliez rajouter ici le nombre de réponses de chaque sujet de discussion. vous écririez cela de la manière suivante. topic.topic_answers. On récupère la collection des réponses pour le sujet de discussion, et .length pour récupérer le nombre de réponses. Mai que se passe-t-il au niveau de notre application Ruby on Rails lorsque nous rafraîchissons la page ? Vous voyez ici toutes ces lignes TopicAnswer Load. Chacune de ces lignes correspond à une requête vers notre base de données. Il semble que notre application Ruby on Rails effectue premièrement une requête pour récupérer l'ensemble des sujets de discussion puis une nouvelle requête pour chaque sujet pour récupérer les réponses. Si nous revenons dans notre index, nous comprenons très vite que c'est exactement ce qu'il se passe. Effectivement ici, pour chaque sujet de discussion sur lesquels nous bouclons, nous allons récupérer le nombre de réponses qui ont été soumises pour ce sujet. C'est cela que nous appelons requêtes n+1. N représente ici le nombre de sujet de discussion. À savoir, 10. C'est-à-dire que nous aurons effectivement dix requêtes vers la base de données, pour récupérer toutes les réponses de chaque sujet. Le plus 1 indique la première requête effectuée pour récupérer l'ensemble des sujets de discussion. Si pour une dizaine de données cela n'est pas très grave, comprenez que sur un millier de données, cela peut avoir d'énormes conséquences sur la performance de votre site. Il existe une gemme qui permet de traquer ces problèmes de requêtes n+1. Cette gemme nommée bullet, permettra de générer des logs où l'ensemble des requêtes n+1 découverte lors de la navigation sur votre site en développement, seront journalisées. Installez-la dans votre groupe de gemmes développement. La documentation de la gemme, leur ennemis, nous fournit un ensemble de configurations que nous pouvons placer dans le fichier Config Environments Development.rb. Vous pouvez mettre la même configuration que vous voyez ici. Bullet logger créera un fichier de journalisation listant l'ensemble des requêtes n+1 rencontrées. Bullet.console affichera un petit avertissement pendant que vous naviguez sur le site web. Lorsque vous modifiez le fichier Development.rd, n'oubliez pas de relancer votre serveur. Si vous rafraîchissez la page de votre site avec la liste des sujets de discussion, vous voyez ce petit message d'avertissement en bas : c'est l'oeuvre de Bullet. Le message d'avertissement nous indique de quel modèle il s'agit, ainsi que son association. Pour pouvoir résoudre ce problème, nous pouvons utiliser la méthode ici Preload avec le nom de l'association en forme de symbole. Une autre méthode existe : Eager_load. Eager_load sera utilisée si vous voulez en plus, effectuer des filtrages vis-à-vis des réponses au niveau des sujets de discussion. Par exemple, si vous voulez récupérer les sujets de discussion auxquels a répondu un utilisateur spécifique. Si vous rafraîchissez la page, vous verrez que le message d'avertissement du bullet a disparu. Enfin, au niveau de load de l'application Ruby on Rails, vous remarquerez que vous n'avez plus onze requêtes, mais deux. Une pour récupérer l'ensemble des sujets de discussion, et une pour récupérer l'ensemble des réponses associées à sujets de discussions. Cette vidéo vous a présentés les problèmes des requêtes n+1, ainsi qu'une solution viable pour pouvoir les résoudre dans les applications Ruby on Rails.

L'essentiel de Ruby on Rails

Concevez des applications web évolutives et intemporelles avec Ruby on Rails. Installez l’environnement, réalisez un projet de stack overflow, enrichissez-le, etc.

6h08 (85 vidéos)
Aucun commentaire n´est disponible actuellement

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !