-
ActiveRecordのパフォーマンス:N+1クエリのアンチパターン
AppSignalでは、開発者のアプリケーションパフォーマンスを支援します。数十億のリクエストを送信する膨大な数のアプリを監視しています。 Rubyとパフォーマンスに関するいくつかのブログ投稿でも少し役立つと思いました。 N + 1クエリの問題は、Railsアプリケーションでよく見られるアンチパターンです。 RailsのActiveRecordなどの多くのORMには遅延読み込みが組み込まれているため、クエリの関連付けを必要になるまで延期できます。この決定をビューにオフロードすることで、どの関連付けをロードする必要があるかを暗黙的に示すことができます。 N + 1クエリの問題は一般的ですが、
-
Railsでのクライアント側のキャッシュ:条件付きGETリクエスト
ロシアの人形のキャッシュに加えて、Railsアプリのパフォーマンスを高速化するためのより多くのテクニックがあります。今回は、Railsに組み込まれている条件付きGETサポートについて説明します。これにより、レンダリングされたページをユーザーのブラウザキャッシュに保存できます。 👋キャッシング以外のパフォーマンスについてもっと知りたい場合は、Ruby(on Rails)のパフォーマンスについてもっとたくさん書いています。Rubyパフォーマンス監視チェックリストをチェックしてください。 EtagおよびLast-Modifiedヘッダー ブラウザがRailsアプリのページに対してHTTPG
-
Rubyでの実行の確認、失敗の再試行、および例外の再発生
発生した例外は、問題が発生したときに代替コードパスを実行するためにレスキューできますが、例外を処理する方法は他にもあります。今回のAppSignalAcademyでは、再試行について説明します。 およびensure キーワード、およびレスキューされた例外の再発生について見ていきます。 信頼性の低いWebAPIと通信しているとしましょう。たまにダウンすることを除けば、リクエストが数秒かかるほど遅いです。私たちのライブラリはこのAPIに依存しているため、可能な限り復元力を高める必要があります。 確認 ensure キーワードは確認に使用されます 例外が発生した場合でも、コードのブロックが
-
Turbolinksを使用してアプリのナビゲーションを高速化する
Turbolinksは、知覚を向上させる最適化です。 ページの切り替えとアプリでのアセットの再読み込みを賢く行うことでパフォーマンスを向上させます。条件付きGETリクエストとは異なり、Railsアプリ自体のRubyコードを変更する必要はありません。 Turbolinks 5はJavaScriptライブラリであり、どこでも機能し(静的ページのように、Railsがなくても)、サポートされていないブラウザでは正常に機能しなくなります。 ターボリンク5 TurbolinksはRailsにバンドルされており、Rails 4以降、デフォルトで新しいアプリケーションに含まれています。Rails5にはTur
-
Rubyの魔法の列挙可能なモジュール
Ruby Magicの別のエピソードの時間です!今回は、Rubyの最も魅力的な機能の1つを見ていきます。これは、 ArrayなどのRubyの列挙可能なクラスを操作するときに使用するメソッドのほとんどを提供します。 、ハッシュ およびRange 。このプロセスでは、列挙可能なオブジェクトで何ができるか、列挙がどのように機能するか、単一のメソッドを実装してオブジェクトを列挙可能にする方法を学習します。 列挙可能 、 #each およびEnumerator 列挙 オブジェクトをトラバースすることを指します。 Rubyでは、オブジェクトを列挙可能と呼びます。 アイテムのセットと、各アイテムをルー
-
Rubyのやり直し、再試行、次のキーワード
再試行について話しました 例外後の再試行について話し合っている間のキーワード。そのあまり知られていない対応するredo 同様に機能しますが、ブロック全体ではなくループ反復を再実行します。 やり直し キーワード 前回のアカデミーの記事で学んだように、再試行 ブロック内のコードの一部を再試行できます: begin puts "Iteration" raise rescue retry end この例では、例外を発生させる前に、「反復」という単語をコンソールに出力します。 tryを呼び出すレスキューブロックが実行されます ブロックを最初からやり直します。これによ
-
ActiveRecordのカウンターキャッシュを使用したカウンターのキャッシュ
ActiveRecordのカウンターキャッシング機能を使用すると、ページが読み込まれるたびにデータベース内の関連レコードをカウントする代わりに、関連オブジェクトが作成または削除されるたびにカウンターを保存して更新できます。 AppSignal Academyのこのエピソードでは、ActiveRecordでのカウンターのキャッシュについてすべて学びます。 記事と回答を含むブログの典型的な例を見てみましょう。各記事には回答を含めることができます。ブログのインデックスページの各記事のタイトルの横に回答数を表示して、人気を示したいと思います。 # app/controllers/articles_c
-
内部:Rubyでのファイルの「スラーピング」とストリーミング
今回のRubyMagicでは、Rubyでのストリーミングファイルと、IOについて学習します。 クラスは、ファイルをメモリに完全にロードせずにファイルの読み取りを処理し、読み取りバイトをバッファリングすることによって1行ごとにファイルを読み取る方法を処理します。さっそく飛び込みましょう! 「スラーピング」およびストリーミングファイル RubyのFile.read メソッドはファイルを読み取り、その完全なコンテンツを返します。 irb> content = File.read("log/production.log") => "I, [2018-06
-
JavaScriptを散りばめたRailsアプリケーション
Railsのフラグメントキャッシュは、ページの大部分がキャッシュされるときに、より高速化されます。これは、動的またはユーザー固有のコンテンツが多いページではより困難です。解決策は、 hagelslagのような「JavaScriptスプリンクル」を使用することです。 、ただしチョコレートは含まれず、ページの残りの部分がキャッシュから直接提供された後にユーザー固有のコンテンツをロードするための追加のリクエストがあります。 フラグメントキャッシング フラグメントキャッシングなどの手法は、レンダリングされたページのフラグメントをキャッシングすることにより、Railsアプリケーションでの応答を高速化す
-
Ruby Magic Summer Special:The Best of AppSignal Academy
あなたが子供の頃、それらのオムニバスダブルエディションコミックを購入したことを覚えていますか?それらを読むことはどれほど魔法でしたか?これが忘れられないものになるとは思いませんが、ビーチ、公園、またはただのんびりとした日曜日に読むための、非常に分厚いBest-ofAppSignalAcademyセレクションをまとめたと思います。絶対にあなたの一日を作ります。 ハンモックの読み取りトップ5は次のとおりです。 Rubyのカスタム例外 Rubyのほとんどすべてがオブジェクトであり、エラーも例外ではありません。 #dadjokes Rubyでの実行の確認、失敗の再試行、および例外の再発生 r
-
Rubyでの乱数の生成
乱数は、ゲーム、暗号化、建物のシミュレーションなど、さまざまな目的に役立ちます。技術的には、コンピューターは純粋に計算によって乱数を生成することはできません。決定論的なデバイスで真に乱数を生成することは基本的に不可能です。期待できる最善の方法は、疑似乱数です。これは、ランダムに生成されたかのように見える一連の数値です。 この記事では、Rubyで乱数を生成するさまざまな方法を見ていきます。 Kernel#randを使用した乱数の生成 まず、randを使用して乱数を生成しましょう。 方法。メソッドが引数なしで呼び出されると、0.0以上1.0未満のfloatが返されます。 rand() >
-
Rubyがオブジェクトを作成する方法を変える
Rubyを素晴らしいものにしていることの1つは、ニーズに合わせてほとんど何でもカスタマイズできることです。これは便利で危険です。足で自分を撃つのは簡単ですが、注意深く使用すると、非常に強力な解決策になる可能性があります。 Ruby Magicでは、便利で危険な組み合わせが優れていると考えています。 Rubyがオブジェクトを作成および初期化する方法と、デフォルトの動作を変更する方法を見てみましょう。 クラスから新しいオブジェクトを作成するための基本 はじめに、Rubyでオブジェクトを作成する方法を見てみましょう。新しいオブジェクトを作成するには (またはインスタンス )、newと呼びます ク
-
Railsコレクションのキャッシング
以前、AppSignalAcademyのRailsでのフラグメントキャッシングについて見てきました。これにより、ビューの小さな部分がキャッシュされるため、ビューのパフォーマンスが大幅に向上します。パーシャルをキャッシュする場合、ビューの他の場所でわずかなコストでそれらを再利用できるという追加の利点があります。 これは小さなコレクションではうまく機能しますが、大きなコレクションではすぐに問題が発生します。この記事では、Railsコレクションのキャッシュがどのように機能するか、そしてそれを使用して大規模なコレクションのレンダリングを高速化する方法を見ていきます。 👋そして、この記事が気に入
-
RubyでのプッシュとPub/Sub
Railsでリアルタイム機能を構築することは、ActionCableのようなライブラリではるかに簡単になりました。 AppSignal Academyのこのエピソードでは、リアルタイムの更新に飛び込み、最小限のWebSocketサーバーを構築して、内部でどのように機能するかを確認します。 プッシュするアプリケーションを構築します データ、および Pub / Subを使用します WebSocketを介して 。コードを始める前に、まず、これら3つの概念の意味を説明するために少し時間を費やしましょう。 プッシュ 受信者にそのデータのポーリングを行わせる代わりに、データを受信者にプッシュす
-
Rubyのクロージャ:ブロック、Procs、Lambdas
Ruby Magicでは、毎日使用するものの背後にある魔法に飛び込んで、それらがどのように機能するかを理解するのが大好きです。このエディションでは、ブロック、プロシージャ、ラムダの違いについて説明します。 ファーストクラス関数を使用するプログラミング言語では、関数を変数に格納し、引数として他の関数に渡すことができます。関数は、他の関数を戻り値として使用することもできます。 クロージャは、環境を備えたファーストクラスの関数です。環境は、クロージャーが作成されたときに存在していた変数へのマッピングです。クロージャーは、別のスコープで定義されている場合でも、これらの変数へのアクセスを保持します。
-
#nil?、#empty?、#blank?、#present?の違い
RubyとRailsには、値の存在やオブジェクトの状態をチェックするために使用できるいくつかのメソッドがあります。 Rubyは#nil?を提供します および#empty? 、およびRailsのActiveSupportは#blank?を追加します および#present? 。これらはすべて独自の方法で機能します。コードで間違ったメソッドを使用すると予期しない結果が生じる可能性があるため、それぞれがデータをどのように評価するかを知ることが重要です。 この記事では、これらの方法に関する知識を更新します。それぞれが使用されるときにどの条件が合格または不合格になるか、および各メソッドが使用できるオブ
-
#to_sまたは#to_str?Rubyで型を明示的にキャストするか暗黙的に強制するか
型強制とは、オブジェクトの型をその値とともに別の型に変更することです。たとえば、#to_sを使用して整数を文字列に変更します または、#to_iを使用して整数に浮動小数点数を指定します 。おそらくあまり知られていない#to_str および#to_int 一部のオブジェクトが実装するメソッドは一見同じですが、いくつかの違いがあります。 AppSignalアカデミーのこのエディションでは、タイプキャスティングのアクターについて簡単に触れながら、Rubyでタイプを明示的にキャストし、暗黙的に強制する方法について詳しく説明します。両方の方法の違いについて説明し、それらの使用方法について説明します。
-
ActiveRecordとEctoPartOne
データは、ほとんどのソフトウェアアプリケーションの中核部分です。データベースからのデータのマッピングとクエリは、開発者の生活の中で繰り返されるタスクです。このため、プロセスを理解し、タスクを簡素化する抽象化を使用できることが重要です。 この2つのシリーズの最初の投稿では、ActiveRecord(Ruby)とEcto(Elixir)の比較を紹介します。両方のツールを使用して、開発者がデータベーススキーマを移行およびマッピングする方法を説明します。 そこで、リンゴとオレンジを比較します。 (オリジナル)バットマンとは対照的に、言葉を言う必要がなかったバットガールは、「私はバットマンです」と明
-
クラスレベルのインスタンス変数の魔法
以前のRubyMagicでは、.newを上書きすることで、モジュールをクラスに確実に挿入する方法を見つけました。 メソッド、追加の動作でメソッドをラップできるようにします。 今回は、その動作を独自のモジュールに抽出して再利用できるようにすることで、さらに一歩進んでいます。 Wrappableを作成します クラス拡張を処理するモジュールであり、その過程でクラスレベルのインスタンス変数についてすべて学習します。さっそく飛び込みましょう! Wrappableの紹介 モジュール 初期化時にオブジェクトをモジュールでラップするには、使用するラッピングモデルをクラスに通知する必要があります。簡単なW
-
ActiveRecordとEctoパート2
これは「ActiveRecordvs。Ecto」シリーズの第2部で、バットマンとバットガールがデータベースのクエリをめぐって争い、リンゴとオレンジを比較します。 ActiveRecordとEctoのパート1でデータベーススキーマと移行を調べた後、この投稿では、ActiveRecordとEctoの両方で開発者がデータベースにクエリを実行できるようにする方法と、同じ要件を処理するときにActiveRecordとEctoの両方を比較する方法について説明します。途中で、バットガールの1989年から2011年のアイデンティティもわかります。 シードデータ 始めましょう!このシリーズの最初の投稿で定義