web-dev-qa-db-ja.com

ページネーション:サーバー側またはクライアント側?

ページネーションを処理するのに最適なものは何ですか?サーバー側か、JavaScriptを使用して動的に実行しますか?

私はajaxに負荷がかかり、データを動的に取り込むプロジェクトに取り組んでいるので、domを使用するjavascriptページネーションシステムに取り組んでいますが、すべてを処理する方がよいと考え始めていますサーバ側。

みんなの考えは?

44
jrutter

正しい答えは、優先順位と、ページ分割するデータセットのサイズによって異なります。

サーバーサイドのページネーションは次の場合に最適です:

  • 大きなデータセット
  • 初期ページの読み込みの高速化
  • JavaScriptを実行していない人のためのアクセシビリティ

クライアント側のページ付けは次の場合に最適です:

  • 小さなデータセット
  • 後続のページの読み込みを高速化

したがって、主に表面的な理由でページ番号を付ける場合は、クライアント側で処理する方が理にかなっています。また、初期読み込み時間を短縮するためにページ番号を付ける場合は、サーバー側が当然の選択です。

もちろん、Ajaxを使用して後続のページをロードする場合、後続のページのロード時間に対するクライアント側の利点は減少します。

68
Cory House

大きなページと多数のページがある場合は、AJAXを介してサーバーからチャンクでページをリクエストすることをお勧めします。したがって、リクエストURLに基​​づいて、サーバーにページ分割を実行させます。

ユーザーが表示する可能性が高い次の数ページをプリフェッチして、インターフェースの応答性を高めることもできます。

数ページしかない場合は、すべてを前もって取得し、クライアントでページ番号を付けることをお勧めします。

データサイズが小さい場合でも、サーバー側のページ付けが最適です。 Webアプリケーションがさらにスケーリングされても、後で心配する必要はありません。

データサイズが大きい場合の答えは明白です。

5
user50705

現実的な制限の世界では、サーバー側のページを表示して、データの送信に関連するすべてのリソースを節約します。また、サーバーは、悪意のある/機能不全のクライアントが巨大なページを要求するのを防ぐ必要があります。

そのコードが喜んでうまく処理されたら、「スマート」をクライアントに追加して「次の」「前の」ページを取得し、それをメモリに保持します。ユーザーが次のページに移動したら、キャッシュを更新します。

クライアントソフトウェアがこの種のページキャッシュを行う場合は、データが古くなる(変更される可能性が高い)速度と、キャッシュされたデータのページがまだ有効であることを確認する必要があるかどうかを検討してください。 2分以上経過している場合は、再リクエストしてください。たぶん、「ダーティ」フラグが含まれているかもしれません。そんな感じ。これがお役に立てば幸いです。 :)

3
Sam

サーバー側-現在のビューに必要なだけのコンテンツをクライアントに送信します。

3
Otávio Décio

JavaScriptはすべてのデータをメモリに保持し、一度に1ページを表示するということですか?それとも、AJAXを使用して、必要に応じてサーバーから各ページをダウンロードしますか?

後者の場合は、並べ替えについても考慮する必要があります。 JavaScriptを使用して並べ替えると、一度に1ページしか並べ替えることができなくなりますが、これはあまり意味がありません。したがって、ソートはサーバー上で行う必要があります。

3
JW.

ここでもう1つ指摘しておきたいのは、生データセットのページングに限定されることはほとんどないということです。

表示している1つ以上の列で特定の用語を検索し、いくつかの列で並べ替えて、このフィルターされたデータセットをユーザーがページングできるようにする必要がある場合があります。

このような状況では、このロジックの検索やソートをクライアント側とサーバー側のどちらにした方がよいかを確認する必要があるかもしれません。

考慮すべきもう1つの点は、Amazonのクラウド検索APIが非常に強力な検索機能を提供し、データがホストされている場合にクラウド検索で検索と並べ替えを処理できるようにすることです。

0
usr28765526