タイトルは私の質問をほぼ要約しています。
データベースにクエリを実行する動的に生成されたページを使用するのとは対照的に、ユーザーがアクセスできる静的ページを生成する方が効率的なのはいつですか。どのような状況で一方が他方よりも優れているかと同じように。
タイトルは私の質問をほぼ要約しています。
データベースにクエリを実行する動的に生成されたページを使用するのとは対照的に、ユーザーがアクセスできる静的ページを生成する方が効率的なのはいつですか。どのような状況で一方が他方よりも優れているかと同じように。
静的ページを提供するには、Webサーバーがディスクからページを読み取って送信するだけです。実質的に処理は必要ありません。ページが頻繁にアクセスされる場合は、おそらくメモリにキャッシュされるため、ディスクアクセスも必要ありません。
ページを動的に生成すると、明らかにオーバーヘッドが大きくなります。クエリがどれほど単純であっても、DBアクセスごとにコストがかかります。(最近取り組んだプロジェクトでは、クエリごとに最小で0.7msのオーバーヘッドを測定しました。SELECT 1;
)したがって、静的ページを生成してディスクに保存するだけで、ページアクセスが高速になります。どれくらい速いですか?これは、ページを動的に生成するために実行されている作業の量によって異なります。あなたが何をしているのかわからないので、コメントすることはできません。
ここで、静的ページを生成してディスクに保存する場合、そのページの生成に使用されたデータが変更されるたびに、静的ページを再生成する必要があることを意味します。ページが実際にアクセスされるよりも頻繁にデータが変更される場合は、作業量が少なくなるのではなく、多くなる可能性があります。しかし、ほとんどの場合、それは非常にありそうもない状況です。
おそらく、静的ページを生成してディスクに保存することで発生する最大の問題は、必要に応じてページを再生成するためのロジックをコーディング(および維持)することです。各ページにどのデータが入るかを正確に追跡する必要があり、データを変更できるコード内のすべての場所で、関連するすべてのページの再生成を呼び出す必要があります。1つだけ忘れた場合、ユーザーは古いデータを見ていることがあります。
リクエストごとの動的生成と生成されたページのディスクへのキャッシュを混在させると、2つのスタイルが混在するため、コードの読み取りと保守が難しくなります。
また、フォーム送信からのPOSTリクエストへの応答など、特定の状況では、生成されたページを実際にディスクにキャッシュすることはできません。または、ユーザーが特定のアクションを呼び出すときに、サードパーティのAPIにリクエストを送信する必要があり、そのAPIから返されるデータがページで使用されることを想像してみてください。APIから返されるものは毎回異なる可能性があるため、この場合、毎回動的にページを生成する必要があります。
静的ページ(またはより優れたリソース)はコンテンツで満たされ、変更されないか、少なくとも頻繁ではなく、それ以上のクエリを許可しません:ページについて、連絡先、...
この場合、これらのページをクエリしても意味がありません。反対側には(たとえばデータベース内の)データがあり、それをクエリしたい/ユーザーにクエリする機会を与えたい。この場合、クエリを指定して動的に生成されたデータを含むレンダリングされたページを返す可能性のあるページをユーザーに提供します。
私の意見では、それはあなたがユーザーに提示したい結果に依存します。単なる情報であるか、データソースを照会する可能性があります。最初の結果は何かをする前にわかり、2番目の(クエリデータ)はクエリパラメータを取得した後にわかります。つまり、結果は事前にわかりません(空または無効の可能性があります)。
アーキテクチャによって異なりますが、GETリクエストがべき等であると考える場合、キャッシュされたパスに表示されるデータに何か新しいことが起こったときに、プロキシを使用して動的ページをキャッシュし、キャッシュを無効にすることも簡単です。この場合、システムはキャッシュされたページが静的であるかのように動作するため、多くの時間を節約できますが、代わりにファイルシステムから取得され、メモリから取得されます。これは非常に高速です。
のんびり乾杯