わずか 3 ステップで Bullet を使用して Rails のクエリをさらに活用する

クローゼットを開けたら中身が全部落ちてしまったという経験はありませんか?プログラミングの現場ではこれを「スパゲッティコード」と呼びます。これらは非常にごちゃ混ぜになっている種類のコードで、少し変更を加えるとすぐにすべてが崩れ始めます。良いコードを書くことは重要ですが、コードをきれいに保つことも同様に重要です。しかし、大規模なアプリケーションを開発している場合、コードをきれいに整理した状態に保つことが難しくなります。この記事では、わずか 3 ステップで Bullet を使用して Rails のクエリをさらに活用する方法を説明します。 複雑さが増した大規模プロジェクトの場合、手動でのコードのリファクタリングは大きなリスクと時間がかかります。したがって、コードのメンテナンス、セキュリティ、最適化には、Bullet Gem などのサードパーティ ツールを使用することをお勧めします。 Richard Huang によって Ruby on Rails 用に開発された Bullet プラグインは、2009 年に初めて使用されました。それ以来、このプラグインは、Ruby on Rails アプリケーションのパフォーマンス向上を監視するのに役立つ強力な宝石であることが証明されています。 Bullet Gem は、アプリケーションが行うクエリの数を減らすのに役立ちます。探すのにも役立ちます N+1 ブラウザに通知を表示することで、開発モード中にアプリケーションでクエリを実行します。 image_bullet_gem N+1 クエリの問題とは、開発者が特定の関連データを何度も取得したいときに、データベースへの追加の呼び出しを行う状況です。例えば、
2.2.1 :005 > Message.all.each {|メッセージ| message.conversation.sender_id}
この例では、すべてのメッセージを取得し、それらの各レコードを反復して、データベースからメッセージ会話を取得しようとします。この問題の解決策は、アプリケーションのクエリの監視に役立つ Bullet プラグインです。 N+1 シナリオと未使用の一括ロードを通知します。これに対する他の一般的な解決策は、preload、includes、eager_load などの積極的な読み込みメソッドを使用することです。次のメソッドの例:-
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|積極的な読み込みは、オブジェクトのループ中に不要なクエリを実行しないようにするための N+1 クエリ問題の解決策です。

Bullet Gemの使用法と構成: 

以下の例は 2 つのモデルを示しています。メッセージと会話。メッセージは多くの会話で構成されます。コードの一部は次のようになります:-
app/controllers/messages_controller.rb クラス MessagesController 内 &lt; ApplicationController def index @messages = Message.all end end app/views/messages/index.html.erb 内 <h1>メッセージ</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 %>
基本的に Bullet gem は、rails アプリケーションの n+1 問題の解決に役立ちます。

わずか 3 ステップで Bullet を使用して Rails のクエリをさらに活用する

ステップ 1:- Bullet gem を gemfile に追加し、バンドルインストールを実行します。
# コード最適化 gem 'bullet' の場合、グループ: [:development, :test]
アプリケーションのユーザーが N+1 クエリの問題に関するアラートを受け取ることを望まないため、gem は開発環境でのみ使用する必要があります。ステップ 2:- アプリケーションで Bullet を有効にする必要があります。 Bullet gem を追加するだけでは、不正なクエリは通知されません。設定は 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を有効にし、それ以外の場合は何もしません Bullet.alert:ブラウザに JavaScript アラートをポップアップ表示する Bullet.bullet_logger: Bullet ログ ファイル (Rails.root/log/bullet.log) にログを記録します Bullet.rails_logger: Rails ログに警告を直接追加します
ステップ 3: サーバーを再起動します。ステップ 2 の後、検出された N+1 クエリを含む JavaScript アラート ポップアップがブラウザーに表示されます。アラートには、問題を保持するファイルと、問題をオーバーライドするために何ができるかについての提案が含まれます。コントローラーでは、
class MessagesController < ApplicationController defindex @messages = Message.includes(:conversations) end end
参考文献:- ギットハブリンク: – https://github.com/flyerhzm/bullet 当社の開発者はあらゆる種類の作業に精通しています。 Ruby on Railsの開発作業 あらゆる種類のプロジェクトを処理します。 お問い合わせ 当社の開発スキルと当社が対応できるプロジェクトについて詳しく知るため。

最新のアップデートを購読する

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

jaJapanese