今週初め、Laravel Rest API を使用しているときに、タイムアウト エラーという迷惑な問題に遭遇しました。これは、開発上の懸念に対するエンドユーザーの不満につながります。全体的なシナリオを簡単に説明します:
外部データ ソースからデータをロードし、フィルタリングして、JSON を返す準備をする必要がありました。データ量はそれほど大きくなく、1 回のリクエストでわずか約 10K でした。主な問題は、ファイルを取得してフィルタリングした後にフォーマットしようとしたときに発生しました。そこで、次の手順を使用してデバッグを開始しました:
クエリが最適化されており、列のインデックスも作成されていることを確認してください。
必ずチャンクメソッドを使用してください
フォーマット リポジトリで、不要なメソッド/参照/実装/未使用の関数/外部 API 呼び出しが使用されていないことを確認してください。
すべてのチェックは完了しましたが、1 分を超えるとゲートウェイ タイムアウト エラーが表示されます。サービスクラスは以下のようになります:
リポジトリ クラスは次のようになります:
肉眼では、10,000 以上のデータの処理と操作に対してタイムアウト エラーがスローされることはありません。最後に、なぜそれが起こるのか(実際の具体的な理由ではないかもしれませんが、おそらく考えられます)について説明し、次に、Laravel API リソースを使用してそれを解決する方法について説明します。
実装は簡単です。まず、コマンドラインから Laravel API リソースを生成します:
php artisan make:resource DataFormatterResource
次に、モデル オブジェクトをリソースに送信し、以下の要件に従ってデータをフォーマット/操作します。
驚くべきことに、応答までにわずか 3.7 秒しかかかりませんでした ?!
ここで本当の問題を掘り出そうとしたところ、最後に定義するために上部で言及したいくつかの考えられるケースを見つけました。ケースは次のとおりです:
私のプロジェクトのサービスのほとんどでは、サービス層でリポジトリまたは関数フォーマッタを利用していましたが、この場合、この問題が発生する他の原因がある可能性があるため、問題が発生しました。
私が強調したかったのは、Laravel リソースは、モデルを操作する際の難しい状況で役立つ可能性があるということです。
この記事が気に入ったら、拍手またはコメントを残してください。 = 「コーディングを楽しんでください!….」 ?>
以上がLaravel リソースまたはカスタマイズされたリポジトリ?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。