Avez-vous déjà ouvert un placard et tout le contenu vous est tombé dessus ? Dans le cadre de la programmation, cela est appelé « code spaghetti ». C’est le genre de codes qui sont tellement confus que dès qu’on fait un petit changement, tout commence à s’effondrer. Autant il est important d’écrire de bons codes, autant il est tout aussi important de les garder propres. Mais lorsque vous développez une application à grande échelle, il devient difficile de garder vos codes propres et organisés. Dans cet article, vous apprendrez à tirer le meilleur parti des requêtes dans les rails à l'aide de Bullet en seulement 3 étapes. Pour les projets à grande échelle avec une complexité accrue, la refactorisation manuelle du code devient un risque énorme et prend du temps. Par conséquent, il est recommandé d'utiliser des outils tiers comme Bullet Gem pour la maintenance, la sécurité et l'optimisation des codes. Le plugin Bullet, développé par Richard Huang pour Ruby on Rails, a été utilisé pour la première fois en 2009. Et depuis lors, il s'est avéré être un joyau puissant qui permet de surveiller les applications Ruby on Rails pour améliorer les performances. Bullet Gem aide à réduire le nombre de requêtes effectuées par une application. Cela aide également à trouver N+1 requêtes dans l'application pendant le mode développement en affichant les notifications dans le navigateur.
N+1 Un problème de requête est une situation dans laquelle le développeur effectue des appels supplémentaires à la base de données lorsqu'il souhaite obtenir encore et encore des données associées spécifiques. Par exemple,
2.2.1 :005 > Message.all.each {|message| message.conversation.sender_id}Cet exemple récupère tous les messages, puis itère chacun de ces enregistrements et tente d'obtenir la conversation des messages à partir de la base de données. La solution à ce problème est le plugin Bullet, qui permet de surveiller les requêtes de l'application. Il notifie les éventuels scénarios N+1 et les chargements impatients inutilisés. Une autre solution courante pour cela consiste à utiliser des méthodes de chargement hâtives : préchargement, inclusions, désireux_load. Exemples pour les méthodes suivantes : -
2.2.1 :007 > Message.includes(:conversation).references(:conversations).each { |message| message.conversation.sender_id } 2.2.1 :008 > Message.eager_load(:conversation).each { |message| message.conversation.sender_id } 2.2.1 :009 > Message.preload(:conversation).all.each { |message| message.conversation.sender_id } Le chargement rapide est la solution au problème de requête N+1 qui garantit que nous ne finissons pas par exécuter des requêtes inutiles lors d'une boucle sur un objet.
Utilisation et configuration de Bullet Gem :
L'exemple ci-dessous montre deux modèles ; Message et conversation, dans lesquels un message se compose de plusieurs conversations. Un peu de code devrait être : -Dans la classe app/controllers/messages_controller.rb MessagesController < ApplicationController def index @messages = Message.all end end Dans app/views/messages/index.html.erb <h1>messages</h1> <% @messages.each do |message| %> <%message.conversations.each do |conversation|%> <ul class="”message_link”"> <li><%=link_to conversation.sender_id, conversation_path(conversation)%></li> </ul> <%end%> <% end %>Fondamentalement, Bullet Gem aide à résoudre le problème n+1 dans l’application Rails.
Tirez le meilleur parti des requêtes dans Rails en utilisant Bullet en seulement 3 étapes
Étape 1 : - Ajoutez la gemme Bullet au gemfile et exécutez l'installation du bundle,# Pour la gemme d'optimisation de code 'bullet', groupe : [:development, :test]La gemme ne doit être utilisée que dans l'environnement de développement, car vous ne voudriez pas que les utilisateurs de l'application reçoivent des alertes sur les problèmes de requête N+1. Étape 2 : - Bullet doit être activé dans l'application. Le simple fait d'ajouter la gemme de puce ne notifiera pas les mauvaises requêtes. La configuration se fait dans le fichier config/environments/development.rb.
config.after_initialize do Bullet.enable = true Bullet.alert = true Bullet.bullet_logger = true Bullet.console = true Bullet.rails_logger = true Bullet.unused_eager_loading_enable = false end Bullet.enable : activez la gemme Bullet, sinon ne faites rien Bullet.alert : afficher une alerte JavaScript dans le navigateur Bullet.bullet_logger : se connecter au fichier journal Bullet (Rails.root/log/bullet.log) Bullet.rails_logger : ajouter des avertissements directement au journal RailsÉtape 3 : Redémarrez le serveur. Après l'étape 2, nous verrions une fenêtre contextuelle d'alerte JavaScript dans le navigateur avec la requête N+1 détectée. L'alerte contiendrait le fichier contenant le problème et les suggestions sur ce qui pourrait être fait pour résoudre le problème. Dans Contrôleur,
class MessagesController < ApplicationController def index @messages = Message.includes(:conversations) end endRéférences:- LIEN GITHUB : – https://github.com/flyerhzm/bullet Nos développeurs maîtrisent parfaitement toutes sortes de travaux de développement de Ruby on Rails et gérer tout type de projet. Contactez-nous pour en savoir plus sur nos compétences en développement et les projets que nous pouvons gérer.
Abonnez-vous pour les dernières mises à jour
Articles Similaires