Har du någonsin öppnat en garderob och fått allt innehåll att rasa över dig? Inom programmering kallas detta för “spagettikod”. Det är den typen av kod som är så rörig att så fort du gör en liten ändring börjar allt falla samman. Det är lika viktigt att skriva bra kod som att hålla den ren och överskådlig. Men när du utvecklar en storskalig applikation blir det svårt att hålla koden ren och organiserad. I den här artikeln får du lära dig hur du får ut mer av dina frågor i Rails med hjälp av Bullet i bara tre steg
För storskaliga projekt med ökad komplexitet blir manuell omarbetning av koden en enorm risk och mycket tidskrävande. Därför rekommenderas det att använda verktyg från tredje part, såsom Bullet Gem, för underhåll, säkerhet och optimering av koden.
Bullet-pluginet, utvecklat av Richard Huang för Ruby on Rails, användes första gången 2009. Sedan dess har det visat sig vara ett kraftfullt verktyg som hjälper till att övervaka Ruby on Rails-applikationer för prestandaförbättringar. Bullet Gem hjälper till att minska antalet frågor som en applikation skickar. Det hjälper också till att hitta N+1 frågor i applikationen under utvecklingsläget genom att visa meddelandena i webbläsaren.
N+1 Ett frågeproblem uppstår när en utvecklare gör onödiga databasförfrågningar för att gång på gång hämta specifika kopplade data.
Till exempel,
N+1 Ett frågeproblem uppstår när en utvecklare gör onödiga databasförfrågningar för att gång på gång hämta specifika kopplade data.
Till exempel,
2.2.1 :005 > Message.all.each {|message| message.conversation.sender_id}I det här exemplet hämtas alla meddelanden, varefter varje post gårs igenom i tur och ordning och man försöker hämta konversationer för meddelandena från databasen. Lösningen på detta problem är plugin-programmet Bullet, som hjälper till att övervaka applikationens databasfrågor. Det varnar för eventuella N+1-scenarier och onödiga eager load-hämtningar. En annan vanlig lösning på detta är att använda metoder för eager loading, såsom preload, includes och eager_load. Exempel på följande metoder:-
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 är lösningen på N+1-frågeproblemet, vilket säkerställer att vi inte kör onödiga frågor när vi går igenom ett objekt i en loop.
Användning och konfiguration av Bullet Gem:
Exemplet nedan visar två modeller: ”Message” och ”Conversation”, där ett ”Message” består av flera ”Conversations”. Koden bör se ut så här:–I app/controllers/messages_controller.rb class MessagesController < ApplicationController def index @messages = Message.all end end I app/views/messages/index.html.erb <h1>Meddelanden</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 %>I grund och botten hjälper Bullet gem till att lösa n+1-problemet i Rails-applikationer.
Få ut mer av dina sökfrågor i Rails med hjälp av Bullet – på bara tre steg
Steg 1:- Lägg till Bullet gem i gemfile och kör bundle install,# För kodoptimering gem ‘bullet’, group: [:development, :test]Gemet bör endast användas i utvecklingsmiljön, eftersom man inte vill att applikationens användare ska få varningar om N+1-frågeproblem. Steg 2:- Bullet bör aktiveras i applikationen. Att bara lägga till gemet bullet räcker inte för att rapportera felaktiga frågor. Konfigurationen görs i filen 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: aktiverar Bullet-gemet, annars görs ingenting Bullet.alert: visar ett JavaScript-varningsmeddelande i webbläsaren Bullet.bullet_logger: loggar till Bullet-loggfilen (Rails.root/log/bullet.log) Bullet.rails_logger: lägger till varningar direkt i Rails-loggenSteg 3: Starta om servern. Efter steg 2 visas ett JavaScript-varningsfönster i webbläsaren med den upptäckta N+1-frågan. Varningsmeddelandet innehåller filen där problemet förekommer samt förslag på hur man kan lösa problemet. I kontrollern,
class MessagesController < ApplicationController def index @messages = Message.includes(:conversations) end endKällor:- LÄNK TILL GITHUB: – https://github.com/flyerhzm/bullet Våra utvecklare har stor erfarenhet av att utföra alla typer av ruby on rails utvecklingsarbete och hantera alla typer av projekt. Kontakta oss att veta mer om vår utvecklingskompetens och de projekt som vi kan hantera.
Prenumerera för de senaste uppdateringarna
relaterade inlägg