ホームページ > バックエンド開発 > PHPチュートリアル > Laravel リソースまたはカスタマイズされたリポジトリ?

Laravel リソースまたはカスタマイズされたリポジトリ?

PHPz
リリース: 2024-08-21 16:37:32
オリジナル
393 人が閲覧しました

今週初め、Laravel Rest API を使用しているときに、タイムアウト エラーという迷惑な問題に遭遇しました。これは、開発上の懸念に対するエンドユーザーの不満につながります。全体的なシナリオを簡単に説明します:

外部データ ソースからデータをロードし、フィルタリングして、JSON を返す準備をする必要がありました。データ量はそれほど大きくなく、1 回のリクエストでわずか約 10K でした。主な問題は、ファイルを取得してフィルタリングした後にフォーマットしようとしたときに発生しました。そこで、次の手順を使用してデバッグを開始しました:

  • クエリが最適化されており、列のインデックスも作成されていることを確認してください。

  • 必ずチャンクメソッドを使用してください

  • フォーマット リポジトリで、不要なメソッド/参照/実装/未使用の関数/外部 API 呼び出しが使用されていないことを確認してください。

すべてのチェックは完了しましたが、1 分を超えるとゲートウェイ タイムアウト エラーが表示されます。サービスクラスは以下のようになります:

Laravel Resource or Customized Repo?

リポジトリ クラスは次のようになります:

Laravel Resource or Customized Repo?

肉眼では、10,000 以上のデータの処理と操作に対してタイムアウト エラーがスローされることはありません。最後に、なぜそれが起こるのか(実際の具体的な理由ではないかもしれませんが、おそらく考えられます)について説明し、次に、Laravel API リソースを使用してそれを解決する方法について説明します。


実装は簡単です。まず、コマンドラインから Laravel API リソースを生成します:

php artisan make:resource DataFormatterResource

ログイン後にコピー

次に、モデル オブジェクトをリソースに送信し、以下の要件に従ってデータをフォーマット/操作します。

Laravel Resource or Customized Repo?

Laravel Resource or Customized Repo?

驚くべきことに、応答までにわずか 3.7 秒しかかかりませんでした ?!
ここで本当の問題を掘り出そうとしたところ、最後に定義するために上部で言及したいくつかの考えられるケースを見つけました。ケースは次のとおりです:

  1. Laravel API リソースは、依存関係注入を含むリポジトリを使用するデータにアクセスして操作するための一貫したインターフェイスを提供します。これにより、効率的なコードを記述し、一般的なパフォーマンスのボトルネックを回避することが容易になります。
  2. Laravel API リソースは、キャッシュやその他のテクニックを使用してデータの取得と処理の速度を向上させるため、パフォーマンスが最適化されており、配列の生のフォーマットのみを対象としています。
  3. Laravel API リソースは、リクエスト ヘッダーに応じて、データベース クエリの結果を JSON または XML に自動的にシリアル化します。これにより、独自のシリアル化コードを記述する手間が省けます。

私のプロジェクトのサービスのほとんどでは、サービス層でリポジトリまたは関数フォーマッタを利用していましたが、この場合、この問題が発生する他の原因がある可能性があるため、問題が発生しました。
私が強調したかったのは、Laravel リソースは、モデルを操作する際の難しい状況で役立つ可能性があるということです。

この記事が気に入ったら、拍手またはコメントを残してください。

以上がLaravel リソースまたはカスタマイズされたリポジトリ?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート