注: 問題の原因がわかったので、質問を修正しました。現在、必要な情報のみが含まれています。
Laravel PHP フレームワークは初めてです。
コンピューターで非常に小さなアプリが動作しています。MySQL データベースに接続され、User モデルがあります。ログインとログアウトには Auth クラスを使用します。
すべて正常に動作しますが、ログインすると、ページの読み込みに約 1 秒かかり、非常に遅くなります。ログインしていないときは、数ミリ秒です。
組み込みのプロファイラーを使用することで、2 つの問題に気付きました。まず、私が言ったように、ページの読み込みには 1000 ミリ秒以上かかります。次に、ログイン時にページをロードするたびに、フレームワークが 1 つの SQL を作成します。クエリは、特定の ID (私の ID) を持つユーザーを検索します。ログインしているユーザーに関する情報を取得するためにあると思います。しかし、ある種のキャッシュがあるはずではありませんか。私の Web サイトが 1 秒間に多くのリクエストを処理しなければならない場合、これは問題になるでしょうか。
Auth::check()
ビューでの使用が問題の原因であることに気付きました。Auth::check()
私のブレードビューは約4です。私が何も持っていないとき、それは速くなります。私が持っている場合、それは遅いです。そうすれば、いくら持っていても、それほど遅くなることはありません。Auth クラスの初期化に時間がかかりすぎる場合などです。ログインしているときにのみ発生する理由を説明していると思います。
Laravel のコードを詳しく調べたところAuth::check()
、 が初めて呼び出されたときに、Auth クラスがデータベースからユーザーの情報を取得してセッションを「アクティブ化」する必要があることがわかりました。これは、ページ要求ごとに実行されるクエリを説明しています。しかし、プロファイラーはクエリの実行に 1 ミリ秒もかからないと言っているので、アプリの速度が低下する理由はまだわかりません。
新しい情報:データベースにクエリを送信していない場合でも、データベースに接続する単純な動作にほぼ 1 秒かかります。これが遅い理由です。問題の解決にかなり近づいていると思います。
これまでのところ何か考えはありますか?
前もって感謝します。
ノート
- ビューにあるという事実
Auth::check()
は何も変更しません。 - のような別の方法を使用
Auth::guest()
しても問題は解決しません。 - 新規:データベースへの接続が遅いです。