django-pagination-performance について
Django 開発者向けに、ページが深くなるにつれて遅くなるリストビューや API の調査を支援するスキルです。要件の整理、クエリ計測、決定的な並び順の確認を通じて、適切なページネーション方式を選びます。
主な機能
- 01ページネーション要件の整理
- 02ページ・件数クエリの計測
- 03オフセットまたはカーソル方式の選択
- 04安定したインデックス付きソート
- 05深いページの挙動確認
活用シーン
- 01大規模な Django フィードの高速化
- 02高コストな深いページへのアクセス制限
- 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 で、ページが進むほど、または結果セットが大きくなるほど遅くなる場合に、このスキルを使用します。ページネーションは、レスポンスの整形だけでなく、クエリ設計の問題でもあります。
ワークフロー
-
リストの要件を確認します。
- 任意のページにアクセスできる必要がありますか。それとも次へ/前へだけでよいですか。
- UI で合計件数が必要ですか。
- 並び順を固定して安定させられますか。
- 許容できるページサイズの上限はいくつですか。
-
現在のクエリを測定します。
- ページ取得クエリと件数取得クエリの SQL を記録します。
- 並び順、インデックス、高いページ番号での動作を確認します。
- 深いページでは
QuerySet.explain()を使用します。
-
ページネーション方式を選択します。
- 中程度の結果セットで任意のページにアクセスする場合は、Django の
Paginatorを使用します。 - ページ番号が便利でも深いページを制限したい場合は、上限付きオフセットページネーションを使用します。
- 大規模なフィード、タイムライン、ログ、無限スクロールには、キーセット/カーソルページネーションを使用します。
- 安定した並び順で API の次へ/前へナビゲーションを実装する場合は、DRF の
CursorPaginationを使用します。
- 中程度の結果セットで任意のページにアクセスする場合は、Django の
Django と DRF の例については、pagination-patterns.md を参照してください。
安全性に関する注意事項
- 深い
LIMIT/OFFSETページは、データベースがスキップする行を走査し続けるため、遅くなることがあります。 - 並び順が指定されていないクエリセットでは、一貫性のないページが返されます。
- カーソルページネーションでは、任意のページへのジャンプやユーザーによる並び順の指定が制限されます。
- 正確な件数の取得に時間がかかると、リストのレイテンシーの大部分を占めることがあります。
検証
選択したページネーション要件について、最初のページ、代表的な深いページ、件数取得クエリ、および挿入/削除時の一貫性を測定します。
コメント
Markdown 対応