ページネーションは、ページと呼ばれるより小さな部分に大きなレコードセットを破壊するための手法です。開発者としては、ページネーションの実装に精通している必要がありますが、リアルタイムのデータにページネーションを実装することは、経験豊富な開発者であっても注意が必要です。このチュートリアルでは、リアルタイムのデータページネーションとカーソルベースのページネーションのための実際のユースケースとソリューションについて説明します。
キーテイクアウトこれらのポイントを考慮すると、リアルタイムデータを処理するためのデフォルトページネーションテクニックに使用することは困難です。実用的なシナリオを使用して問題を特定してみましょう。
最初に20のレコードがあり、10を使用してレコードをページに分割するために制限として使用していると仮定します。次の画像は、レコードがどのようにページに分割されているかを示しています。
最初のページにあるときに、結果セットが5つの新しいレコードによって更新されると仮定します。次の画像は、現在のシナリオを示しています
次に、2番目のページに移動します。最初の画像に基づいて、1〜10のレコードを取得する必要があります。ただし、数字15〜6のレコードが取得されます。レコード番号15-11が最初のページと2番目のページの両方に表示されることを明確に確認できます。
私たち全員が知っているように、ホイールを再発明することは、開発者がすべきことではありません。私たちは、独自の構築を考える前に、これらの問題を解決したサイトの既存のページネーション技術を調べる必要があります。 TwitterやFacebookなどの多くのソーシャルネットワーキングサイトは、ユーザープロファイルにリアルタイムデータを提供しています。このセクションでは、最も人気のあるサイトのいくつかを使用して、リアルタイムデータページネーションの実際のユースケースを検討します。
Twitterユーザープロファイルには新しいツイートが頻繁に入力されているため、Twitterタイムラインデータ検索メカニズムは、リアルタイムのデータフィードでページネーション技術を特定するための適切なスタートになるはずです。 Twitter APIメソッドを使用してそれがどのように機能するかを見てみましょう。
以下には、Twitter API検索ツイート方法へのサンプルリクエストが含まれています。
https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
ご覧のとおり、Search_Metadataセクションでは、結果に関する詳細を提供します。 Paginateのレコードが増える場合に備えて、next_results URLが生成されます。主に、ページネーションにMAX_IDパラメーターを使用しています。各応答を使用すると、MAX_IDパラメーターを取得し、それを使用して次の結果セットを生成できます。 MAX_IDパラメーターを使用して、指定されたIDよりも古い結果を受信します。 この例では、レコード20-11を表示しながら、MAX_IDパラメーターをレコード11として取得する必要があります。次に、MAX_IDを渡して次の結果セットを生成します。したがって、次の画像に示すように正確な結果が得られます。
ご覧のとおり、オフセットベースのページネーションで10ではなく上部で15のレコードを排除することにより、2ページ目の正確な結果が得られます。カーソルベースのページネーションでは、ページが急速に変化するため、ページの概念を考慮することはできません。そのため、結果は以前または次と見なされます。一般的に、MAX_IDは正確な結果を生成するのに十分効果的ですが、前後にパジをパジングしながらanse_idも不可欠であるシナリオがある場合があります。 Twitterの開発者セクションでMAX_IDとANSE_IDの両方を使用するより高度な例を見ることができます。
Facebook APIカーソルベースのページネーション
FacebookのAPI実装は、両方のAPIが同じ理論を使用しているにもかかわらず、Twitterと比較してわずかに異なります。 Facebook APIリクエストのサンプルの応答を見てみましょう。
リアルタイムデータを使用したほとんどのAPIは、このメカニズムを使用して結果を正確にページングします。開発者として、既存のAPIを使用し、必要に応じて独自のAPIを使用するために、カーソルベースのページネーションの背後にある理論を知る必要があります。
リアルタイムデータのページネーションの構築の基本"search_metadata": { "max_id": 250126199840518145, "since_id": 24012619984051000, "refresh_url": "?since_id=250126199840518145&q=php&result_type=recent&include_entities=1", "next_results": "?max_id=249279667666817023&q=php&count=10&include_entities=1&result_type=recent", "count": 10, "completed_in": 0.035, "since_id_str": "24012619984051000", "query": "php", "max_id_str": "250126199840518145" }
リアルタイムデータページネーションの実装は、このチュートリアルの範囲を超えた複雑なタスクであるため、カーソルベースのページネーションを理解するための単純なページネーションメカニズムを作成するプロセスを調べます。
以前に説明した例を使用して、カーソルベースのページネーションの基本的なコンポーネントを特定しましょう。
カウント - カーソルの前後に限られた数の結果をフィルタリングするためのオフセットベースのページネーションと同様に、カウントパラメーターが必要です。
次のURL - これは、APIを介してページネーションを提供している場合に必要です。ユーザーは、次のページが利用可能かどうか、次のデータセットを取得する方法を知る必要があります。
これらは、カーソルベースのページネーションの基本的なニーズです。開発者は、多くの場合、オフセットベースのページネーションを使用して、カーソルベースのページネーションで作業する機会を得ることはめったにないため、適切なシナリオでそれらを使用するための各手法の違いと利点を特定することが重要です。
これまでのところ、カーソルベースのページネーションの基本的なニーズと違いを調べました。これで、サンプルの実装に移動して、それがどのように機能するかを特定できます。
https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
次のコードには、このセクションで生成されたページネーションの初期化コードが含まれています。
https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
今では、リアルタイムのデータページネーションの仕組みを理解するための単純なデータページネーションサンプルがあります。このコードを使用して、結果を介してページングします。ページング中に、テーブルの端にいくつかのレコードを追加して、リアルタイムにします。次に、前後にページのデータの複製を確認します。違いを理解するためにオフセットベースのページネーションで同じことをしてください。
結論カーソルベースのページネーションに関するよくある質問(FAQ)
アプリケーションにカーソルベースのページネーションの実装には、いくつかのステップが含まれます。まず、カーソルとして使用する一意の識別子を決定する必要があります。これは、タイムスタンプ、一意のID、またはその他の一意の値です。次に、データベースクエリを変更して、このカーソルに基づいてレコードを取得する必要があります。最後に、アプリケーションのUIを更新して、ページ化されたデータを処理し、ユーザーがページをナビゲートできるようにする必要があります。ページネーションは、オフセットベースのページネーションよりも効率的で信頼性が高く、いくつかの潜在的な欠点があります。たとえば、特にデータがカーソルとして使用する明確な一意の識別子がない場合、実装する方が複雑になる可能性があります。さらに、特定のページ番号にジャンプする必要がある場合など、すべてのユースケースに適していない場合があります。 - ベースのページネーションは、GraphQLで使用できます。実際、GraphQLには、リレー仕様を介したカーソルベースのページネーションのサポートが組み込まれています。これにより、GraphQLアプリケーションに効率的で信頼性の高いページネーションを簡単に実装できます。カーソルとしてのタイムスタンプや一意のIDなどの識別子。次に、このカーソルに基づいてSQLクエリを変更してレコードを取得し、「WHERE」と「LIMIT」条項を使用してレコードの範囲を指定して取得します。 api?
以上がカーソルベースのページネーションを使用したリアルタイムデータをページングしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。