Haben Sie schon einmal einen Schrank geöffnet, nur um festzustellen, dass der gesamte Inhalt über Sie herabfällt? In der Programmierumgebung wird dies als „Spaghetti-Code“ bezeichnet. Das sind die Codes, die so durcheinander sind, dass bei einer kleinen Änderung alles auseinanderfällt. So wichtig es ist, gute Codes zu schreiben, so wichtig ist es auch, sie sauber zu halten. Wenn Sie jedoch eine umfangreiche Anwendung entwickeln, wird es schwierig, Ihre Codes sauber und organisiert zu halten. In diesem Artikel erfahren Sie, wie Sie mit Bullet in nur 3 Schritten mehr aus Abfragen in Rails herausholen. Bei großen Projekten mit zusätzlicher Komplexität wird die manuelle Code-Umgestaltung zu einem großen Risiko und zeitaufwändig. Daher wird empfohlen, für die Wartung, Sicherheit und Optimierung von Codes Tools von Drittanbietern wie Bullet Gem zu verwenden. Das von Richard Huang für Ruby on Rails entwickelte Bullet-Plugin wurde erstmals 2009 verwendet. Seitdem hat es sich als leistungsstarkes Juwel erwiesen, das dabei hilft, Ruby on Rails-Anwendungen auf Leistungsverbesserungen zu überwachen. Bullet Gem trägt dazu bei, die Anzahl der Abfragen einer Anwendung zu reduzieren. Es hilft auch beim Finden N+1 Anfragen in der Anwendung während des Entwicklungsmodus durch Anzeige der Benachrichtigungen im Browser.
N+1 Bei einem Abfrageproblem handelt es sich um eine Situation, in der der Entwickler zusätzliche Aufrufe an die Datenbank durchführt, wenn er bestimmte zugehörige Daten immer wieder abrufen möchte. Zum Beispiel,
2.2.1 :005 > Message.all.each {|message| message.conversation.sender_id}Dieses Beispiel ruft alle Nachrichten ab, iteriert dann jeden dieser Datensätze und versucht, die Nachrichtenkonversation aus der Datenbank abzurufen. Die Lösung für dieses Problem ist das Bullet-Plugin, das dabei hilft, die Abfragen der Anwendung zu überwachen. Es benachrichtigt alle N+1-Szenarien und die ungenutzten Eager Loads. Eine andere gängige Lösung hierfür ist die Verwendung von Eager-Loading-Methoden wie Preload, Includes und Eager_load. Beispiele für die folgenden Methoden:-
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 } Eager Loading ist die Lösung für das N+1-Abfrageproblem, das sicherstellt, dass wir beim Durchlaufen eines Objekts keine unnötigen Abfragen ausführen.
Verwendung und Konfiguration von Bullet Gem:
Das folgende Beispiel zeigt zwei Modelle; Nachricht und Konversation, wobei eine Nachricht aus vielen Konversationen besteht. Ein bisschen Code sollte sein:-In app/controllers/messages_controller.rb Klasse MessagesController < ApplicationController def index @messages = Message.all end end In app/views/messages/index.html.erb <h1>Mitteilungen</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 %>Grundsätzlich hilft Bullet Gem bei der Lösung des n+1-Problems in Rails-Anwendungen.
Holen Sie mit Bullet in nur 3 Schritten mehr aus Abfragen in Rails heraus
Schritt 1: – Fügen Sie Bullet Gem zur Gemfile hinzu und führen Sie die Bundle-Installation aus.# Zur Codeoptimierung gem „bullet“, Gruppe: [:development, :test]Das Gem sollte nur in der Entwicklungsumgebung verwendet werden, da Sie nicht möchten, dass die Benutzer der Anwendung Benachrichtigungen über die N+1-Abfrageprobleme erhalten. Schritt 2: – Bullet sollte in der Anwendung aktiviert sein. Durch einfaches Hinzufügen des Bullet-Gems werden die fehlerhaften Abfragen nicht benachrichtigt. Die Konfiguration erfolgt in 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: Bullet-Gem aktivieren, andernfalls nichts tun Bullet.alert: Öffnen Sie eine JavaScript-Warnung im Browser. Bullet.bullet_logger: Protokollieren Sie in der Bullet-Protokolldatei (Rails.root/log/bullet.log). Bullet.rails_logger: Fügen Sie Warnungen direkt zum Rails-Protokoll hinzuSchritt 3: Starten Sie den Server neu. Nach Schritt 2 würden wir im Browser ein JavaScript-Warnungs-Popup mit der erkannten N+1-Abfrage sehen. Die Warnung würde die Datei enthalten, die das Problem enthält, sowie Vorschläge, was getan werden könnte, um das Problem zu beheben. Im Controller,
Klasse MessagesController < ApplicationController def index @messages = Message.includes(:conversations) end endReferenzen:- GITHUB-LINK: – https://github.com/flyerhzm/bullet Unsere Entwickler sind mit allen möglichen Aufgaben bestens vertraut Ruby on Rails-Entwicklungsarbeit und Abwicklung von Projekten jeglicher Art. Kontaktiere uns um mehr über unsere Entwicklungskompetenzen und die Projekte zu erfahren, die wir bearbeiten können.
Abonnieren Sie die neuesten Updates
zusammenhängende Posts