Ti è mai capitato di aprire un armadio e ritrovarti tutto il contenuto al suo interno? Nelle impostazioni di programmazione, questo è chiamato “codice spaghetti”. Questi sono i tipi di codici così confusi che non appena si apporta una piccola modifica, tutto inizia a cadere a pezzi. Per quanto sia importante scrivere buoni codici, è altrettanto importante mantenerli puliti. Ma quando si sviluppa un'applicazione su larga scala, diventa difficile mantenere i codici puliti e organizzati. In questo articolo leggerai come ottenere di più dalle query in rail utilizzando bullet in soli 3 passaggi. Per progetti su larga scala con maggiore complessità, il refactoring manuale del codice diventa un rischio enorme e richiede molto tempo. Pertanto, si consiglia di utilizzare strumenti di terze parti come Bullet Gem per la manutenzione, la sicurezza e l'ottimizzazione dei codici. Il plugin Bullet, sviluppato da Richard Huang per Ruby on Rails, è stato utilizzato per la prima volta nel 2009. E da allora si è rivelato un potente gioiello che aiuta a monitorare le applicazioni Ruby on Rails per migliorare le prestazioni. Bullet Gem aiuta a ridurre il numero di query effettuate da un'applicazione. Aiuta anche a trovare N+1 query nell'applicazione durante la modalità di sviluppo mostrando le notifiche nel browser.
N+1 un problema di query è una situazione in cui lo sviluppatore effettua chiamate extra al database quando desidera ottenere più e più volte dati associati specifici. Per esempio,
2.2.1 :005 > Messaggio.all.each {|messaggio| messaggio.conversazione.sender_id}Questo esempio ottiene tutti i messaggi, quindi esegue l'iterazione di ciascuno di questi record e tenta di ottenere la conversazione dei messaggi dal database. La soluzione a questo problema è il plugin Bullet, che aiuta a monitorare le query dell'applicazione. Notifica eventuali scenari N+1 e i carichi desiderosi non utilizzati. Un'altra soluzione comune a questo problema consiste nell'utilizzare metodi di caricamento desiderosi: preload, include, desideroso_load. Esempi per i seguenti metodi:-
2.2.1 :007 > Messaggio.includes(:conversazione).references(:conversazioni).each { |messaggio| messaggio.conversazione.sender_id } 2.2.1 :008 > Messaggio.eager_load(:conversazione).each { |messaggio| messaggio.conversation.sender_id } 2.2.1 :009 > Messaggio.preload(:conversation).all.each { |message| message.conversation.sender_id } Il caricamento impaziente è la soluzione al problema delle query N+1 che ci assicura di non finire con l'esecuzione di query non necessarie durante il looping di un oggetto.
Utilizzo e configurazione di Bullet Gem:
L'esempio seguente mostra due modelli; Messaggio e conversazione, in cui un messaggio è costituito da molte conversazioni. Il bit di codice dovrebbe essere: -Nella classe app/controllers/messages_controller.rb MessagesController < ApplicationController def indice @messages = Message.all end end In app/views/messages/index.html.erb <h1>Messaggi</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 %>Fondamentalmente la gemma Bullet aiuta a risolvere il problema n+1 nell'applicazione su rotaie.
Ottieni di più dalle query in Rails utilizzando Bullet in soli 3 passaggi
Passaggio 1: - Aggiungi Bullet gem al gemfile ed esegui l'installazione del bundle,# Per l'ottimizzazione del codice gem 'bullet', gruppo: [:development, :test]Il gem dovrebbe essere utilizzato solo nell'ambiente di sviluppo, poiché non vorrai che gli utenti dell'applicazione ricevano avvisi sui problemi delle query N+1. Passaggio 2: - Il punto elenco deve essere abilitato nell'applicazione. La semplice aggiunta della gemma del proiettile non avviserà le query errate. La configurazione viene eseguita 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: abilita Bullet gem, altrimenti non fare nulla Bullet.alert: visualizza un avviso JavaScript nel browser Bullet.bullet_logger: registra nel file di registro di Bullet (Rails.root/log/bullet.log) Bullet.rails_logger: aggiunge avvisi direttamente nel registro di RailsPassaggio 3: riavviare il server. Dopo il passaggio 2, vedremmo un popup di avviso JavaScript nel browser con la query N+1 rilevata. L'avviso conterrebbe il file che contiene il problema e i suggerimenti su cosa si potrebbe fare per risolverlo. Nel Controllore,
class MessagesController < ApplicationController def indice @messages = Message.includes(:conversazioni) end endRiferimenti:- COLLEGAMENTO GITHUB: – https://github.com/flyerhzm/bullet I nostri sviluppatori sono esperti nel fare tutti i tipi di lavoro di sviluppo di ruby on rails e gestire qualsiasi tipo di progetto. Contattaci per saperne di più sulle nostre capacità di sviluppo e sui progetti che possiamo gestire.
Iscriviti per gli ultimi aggiornamenti
Articoli correlati