ページネーションを使用すると、サーバーの負荷が軽減されますか?(理論)


11

ページネーションの背後にある理由は何ですか?ページごとに返される行の量を技術的に制限するため、サーバーの負担を軽減するために使用されていますか?

ページネーションなしで何かをしたかったのですが、私はこれが初めてなので(私はアマチュアです)、技術的にOKかどうか疑問に思い始めました。


このサイトで「質問」をクリックしたときに、気にしない何千行もの質問をブラウザがダウンロードして表示するのを本当に待ちたいですか?
ジェレミー

3
ページネーションは、DBよりも人間にとって重要です。
マルフィスト

回答:


10

ページネーションを行う理由はいくつかありますが、サーバーの負荷を減らすことはたった1つのことです。ただし、Stephen Orrは有効なポイントを挙げています。データ量を最初に見つける必要があります。そのクエリが迅速であり、サーバーを過度にロードしないことを確認する必要があります。

その他の理由は次のとおりです。

  • クライアントに返されるデータの量を一度に減らす。大量のデータがある場合、これにはかなりの時間がかかり、多くのメモリを消費します。
  • 多くの場合、ユーザーはすべてのデータに興味があるのではなく、最新のデータのみに興味があります。数ページのデータのみを返すことにより、ユーザーが決して見ることのないデータを取得できません。

どちらの場合も、ユーザーに表示させないデータや、一部の処理でデータを取得できるすべてのデータを待たせたくありません。


2
+1私は似たようなものを書いていましたが、速すぎました。ページ付けコンテンツも追加を表示する方法として(ab)使用されていることを追加します。
ヤンニス

また、現在のページに収まるよりも多くのデータがあることを知っていれば、ページがいくつあるかを調べることなくページを作成できます。
カルロカイプ

3

実装によって異なります。

ページのレンダリングを高速化しますが、必ずしもサーバーの負荷が軽減されるわけではありません。ほとんどの単純なページネーションアルゴリズムは、最初にクエリを実行してページ数を決定し、次に再度クエリして「ページングされた」結果セットを取得する必要があります。


ほとんどの単純なページネーションアルゴリズムは、最初にクエリを実行してページ数を決定する必要があります。ただし、カウントクエリとページネーション結果の取得クエリのデータベースへの累積ストレスは、ほとんどの場合、一般的なシナリオのすべて取得クエリよりもはるかに少なくなります(
きちんと

@YannisRizos、絶対に。信じられないほどひどく構造化されたリレーショナルデータベース(結果を取得するためにクエリの多くが7または8つの異なるテーブルを結合する)で、これの暗い側面を見たところです。
スティーブヒル

@YannisRizos:「データベースのストレス」を定義します。あなたはまだ2つのクエリを行全体に突き出している。クエリのページネーション(行カウントのスーパーセレクト)か、結果を別の層にキャッシュしていますか?dbストレスが多すぎると言うにはあまりにも多くの変数があります。私は、トランザクションの意味で適切に行われていると主張します(ページのダーティな読み取り/一貫性のないカウントを許可しますか?)dbの「ストレス」/負荷を増加させますが、プログラミングを簡素化します。
ジェキュー

@Xepoch私はあまり多くのストレスは言わなかった、ただその数に加えて、限られた選択<全選択。そして、それはよく構造化されたリレーショナルデータベースの一般的なシナリオにのみ当てはまります。
ヤニス

1

ページネーションから得られる最大の価値は、次の方法でアプリケーションの速度を向上させることです。

1-クライアントとサーバーの間で送信されるデータを制限します。ユーザーが10人を探している場合、1000000人の顧客を読む意味はありません。

2-ユーザーのビューに収まる行のみを取得することにより、クエリのパフォーマンスを大幅に高速化します。ユーザーが最初の10人の顧客を見る場合、1000000人の顧客を読む意味はありません。

3-ページネーションは、より新しいデータを提供することで役立ちます。アプリケーションに多数のデータ行が表示され、表示されたテーブルのデータ行をアプリケーションドメインで大量に更新する必要がある場合、ページのリストの20ページに移動するまでに、一部の行のデータがかわった。ホテルの株価または利用可能な部屋を読み取るアプリケーションを考えてください。古いデータを取得してクライアントに配置することは役に立ちません。

ページネーションは、複数のユーザーがデータベースにアクセスしているときに、フィルタリングと特定のシナリオからのエンドユーザーのニーズ(このニーズに応える適切な設計につながることが期待される)の理解と組み合わせて、アプリケーションを大幅に強化する1つの戦略です同時に。

ページネーションは、必ずしもプログラムにとって簡単ではありません。場合によっては簡単ですが、フルテーブルスキャンを実行せずにSQLクエリが実行されるように記述するのは非常に複雑な場合があります。もちろん、これはインデックス、フィルター条件、Whereステートメントに依存します。


-4

私の考えでは、ページネーションはすべての時期尚早な最適化の母です。ページネーションなしでサイトを書くことは絶対に大丈夫です。

リリース後に、1回の呼び出しで大量のデータを読み込んでいる、またはユーザーが不要なデータの読み込みで忙しいために必要な情報を待たなければならない場合は、先に進んでAjaxソリューションを作成しますユーザーが下にスクロールするときにのみページをロードします(Twitter、Tumblr、Google画像検索を参照)。

編集:上記の2番目の段落は、一般的な応答は「ただし、ある時点でページネーションを行うことがわかっている場合は、スローするものを開発する時間を無駄にするのではなく、早めに行うこともある」という前提で書かれています離れて。」

すべての時期尚早な最適化の母であるだけでなく、ページネーションはUXの悪夢であり、完全なページの上に余計な開発を必要としないより良いソリューションがあると思います。

ダウン投票の数にもかかわらず、私はこの最高の執筆ではなかったかもしれないが、私は感情を支持しているので、この答えをここに残しています。


5
私はこの声明に強く反対します。ページネーションはDBを最適化するためのものではなく、管理可能なチャンクのデータを人間に提供するためのものです。すべてが1ページにある場合、ハリーポッターを読むことができますか?税コードがすべて1ページにある場合、税を申告できますか?
マルフィスト

@Malfist:1つのページでこれらのものを処理できなかった唯一の理由は、ページ自体が大きすぎるためです。これはWebページの問題ではありません。したがって、私が引用したサイトはページネーションのより良い解決策を見つけましたが、Lolcatsは現在、賢明な方法でページネーションを行うことが不可能な2000ページ近くを持っています。しかし、それはあなたの下票です、あなたがするようにそれを使用してください。
pdr

1
@Malfist:また、管理可能なチャンクに分割しても、それらのチャンクが移動しない場合は十分に公平です。1〜4ページを読んだら、次に戻って5ページ目を読みたいと思います。しかし、多くの場合、ページ付けされたWebサイトはアイテムのリストで、最新のものが最初です。したがって、後でページ5に戻ると、リストにまったく新しい1.5ページがあるため、前回そこにいたときから実際にページ3の半分とページ4の半分が表示されます。
pdr

2
-1これにも強く反対します。私はどこでその理由を説明し始めるのかさえわかりません。
クレイジュ

@クレイジュ:まあ、OK。私は確かにそれについて多くの議論をすることはできません。
pdr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.