mcpField
D
django-pagination-performance

django-pagination-performance

github.com/lvtd-llc開発162 回インストール7 週間前に更新
リポジトリ

django-pagination-performance について

Django 開発者向けに、ページが深くなるにつれて遅くなるリストビューや API の調査を支援するスキルです。要件の整理、クエリ計測、決定的な並び順の確認を通じて、適切なページネーション方式を選びます。

主な機能

  1. 01ページネーション要件の整理
  2. 02ページ・件数クエリの計測
  3. 03オフセットまたはカーソル方式の選択
  4. 04安定したインデックス付きソート
  5. 05深いページの挙動確認

活用シーン

  1. 01大規模な Django フィードの高速化
  2. 02高コストな深いページへのアクセス制限
  3. 03ページ結果の不整合の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/lvtd-llc/skills --skill django-pagination-performance

インストール後、Claude Code で/django-pagination-performanceを入力して読み込まれたか確認します。

同梱ファイルreferences/pagination-patterns.md

詳細

Django ページネーションのパフォーマンス

Django のリストビューや API で、ページが進むほど、または結果セットが大きくなるほど遅くなる場合に、このスキルを使用します。ページネーションは、レスポンスの整形だけでなく、クエリ設計の問題でもあります。

ワークフロー

  1. リストの要件を確認します。

    • 任意のページにアクセスできる必要がありますか。それとも次へ/前へだけでよいですか。
    • UI で合計件数が必要ですか。
    • 並び順を固定して安定させられますか。
    • 許容できるページサイズの上限はいくつですか。
  2. 現在のクエリを測定します。

    • ページ取得クエリと件数取得クエリの SQL を記録します。
    • 並び順、インデックス、高いページ番号での動作を確認します。
    • 深いページでは QuerySet.explain() を使用します。
  3. ページネーション方式を選択します。

    • 中程度の結果セットで任意のページにアクセスする場合は、Django の Paginator を使用します。
    • ページ番号が便利でも深いページを制限したい場合は、上限付きオフセットページネーションを使用します。
    • 大規模なフィード、タイムライン、ログ、無限スクロールには、キ​​ーセット/カーソルページネーションを使用します。
    • 安定した並び順で API の次へ/前へナビゲーションを実装する場合は、DRF の CursorPagination を使用します。

Django と DRF の例については、pagination-patterns.md を参照してください。

安全性に関する注意事項

  • 深い LIMIT/OFFSET ページは、データベースがスキップする行を走査し続けるため、遅くなることがあります。
  • 並び順が指定されていないクエリセットでは、一貫性のないページが返されます。
  • カーソルページネーションでは、任意のページへのジャンプやユーザーによる並び順の指定が制限されます。
  • 正確な件数の取得に時間がかかると、リストのレイテンシーの大部分を占めることがあります。

検証

選択したページネーション要件について、最初のページ、代表的な深いページ、件数取得クエリ、および挿入/削除時の一貫性を測定します。

コメント