改めてページネーションについて考える

2020年6月22日

テクノロジー プログラミング

eyecatch 効率のいいWEBサイトを追求する、ユゲタです。 簡単そうで、自分で1から実装しようとすると意外と難しい「ページネーション」について、データ量の多いWEBサイトでは必至機能なのに、開発現場であまり重要視されにくいので、その機能について、ちゃんと考えてみることにした。

本日のIT謎掛け

「データボリューム」と、かけまして・・・ 「漁獲されたサメ」と、ときます。 そのココロは・・・ 大きくなると、フカ(サーバー不可と、サメのフカの値段)が高くなります。

ページネーションの役割

Googleで検索した時に、検索結果の下に必ず付いているページングと呼ばれるアレが、ページネーションですが、 この機能によって、検索結果がどのくらいのボリュームがあるかを体感することができます。 もちろん、ページ上部に、検索結果数が「約○○件」と書かれているんですが、上位から何件目を表示しているかも体感することができ、ページング効果は無意識であってもアリアリですね。 そして、システムを作っていると、何かしらのデータをリスト表示するケースは少なからずあります。 さらに、ページネーション機能を使うと、1回で読み込む件数を一定以下に制限できるため、そのリストを出力するサーバーの処理負荷も、軽減できるというメリットもあります。 同時に利用者もリスト表示される時間が長いと、イライラしがちですが、こうした体感値も、向上させることができます。

無限読み込み機能

WEBマーケティングでは、ページネーションと並ぶ機能として「無限読み込み」という機能があります。 この無限読み込み機能というのは、TwitterやFacebookなどのSNSでのタイムライン表示するページで、スクロールを下にしていって、どんどん次の画像が読み込まれて、SNSの中毒性は、この無限読み込み(スクロール)機能の為であるとも考えられます。 実はこの無限読み込み機能も、1度の読み込み件数を一定にすることができる為、サーバー負荷はページネーション機能と同じレベルになる上、ユーザーの待ち時間軽減も、同レベルだと容易に考えられます。 そう考えると、無限読み込み機能は、ページを1度読み込むと、あとは次々と読み込まれるため、あまりストレスを感じにくいんですが、 ページネーションは、リンクして次のページを読み込む事になるため、ページ読み込みを体感してしまう事を考えると、無限読み込み機能は、メリットがあるとも考えられますね。

ページネーションのパターン

いろいろなページで探してみたところ、デザインも含めて以下のようなページネーションを見つけることができました。 ページ番号のリンク以外に「前」「次」のリンク機能がありますが、中には、ページリストの「先頭」「末尾」のリンクも設けているものもありますね。 そして、次の4パターンが考えられます。 1. page-lists (max-count) [1] 2 3 4 5 .. - max-count : maxximam number is arbitary. 2. page-lists + prev&next < 1 [2] 3 4 5 .. > - prev , next : 1 page fiber. 3. page-lists + prev&next + first&last << < 1 2 [3] 4 5 .. > >> - first , last : page-1st , page-last link. 4. prev&next , page-lists(between,max-count) < 1 .. 5 [6] 7 .. 10 > - between : Show start and end with maximum number. 1番は、ページ番号のリンクのみで、5件以上を「..」としています。 2番は、1番に「前」「次」のリンクが追加されています。 3番は、さらに「先頭」と「末尾」のリンクが追加されていますが、 4番は、「先頭」「末尾」リンクをページ番号を表示することで不要にすることができます。 こうしてみると、4番が一番スッキリしてすべての機能を網羅させているので、この方式が良いことがわかります。

エンジニアとしてのページネーション構築

[webページライブラリ] Pagenation ライブラリを作ってみて、難しかった点は、 1. ページリンクで、現在表示されているページのactiveの前後数件リンクを表示する箇所で、リスト先頭と、リスト末尾が、中間値ではなく、最小値と最大値に寄せていくところの計算は、まあまあややこしい感じでした。 わかりやすく図解にすると、 通常は、
.. 2 3 [4] 5 6 ...
となりますが、 先頭は、
[1] 2 3 4 5 ..
となり、 前後に2件ずつ表示させますが、2ページ目までは、
1 [2] 3 4 5 ..
という風に、前後数が変動します。 結果的に、最小値と最大値を条件で持たせた5つの配列としてページを算出する方式にしたんですが、5つの件数を任意にしているところも含めてとても苦労した点です。 また、めんどくさかった点として、1ページ目の場合は、「前」リンクが無いとか、
1 .. 2 3 [4] 5 6 .. 10
という風に「..」をつけるタイミングなどについても、意外とスマートな書き方ではなかったので、もっと簡潔な書き方ができないか、今でも考えてしまいます。 ともかく、便利なシステム構築の為にページネーションは不可欠であるとも考えられますね。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ