【要約】個人開発で踏みやすいパフォーマンス・アンチパターン 5 点 — Prisma N+1 から useMemo 漏れまで [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
開発者が個人開発において、実装の容易さを優先するあまり、パフォーマンスを損なう設計を行う。これにより、システムの応答性やリソース消費に悪影響を及ぼす。具体的には以下の問題が発生する。
- ・Prismaでの重複クエリ発行によるN+1問題。
- ・DB全件取得後のメモリ上でのスライスによる転送量増大。
- ・Reactでの不要な再計算や、O(N×M)の二重ループによる計算量爆発。
- ・不要な関連データまで取得するEager fetchによる負荷。
// Approach
開発者は、DB層とフロントエンド層の両面から最適化を行う。具体的な手法は以下の通りである。
- ・Prismaの
includeやselectを用いて、クエリを集約し取得項目を絞る。 - ・DBレベルでの
takeやwhereを徹底し、不要なデータ転送を防ぐ。 - ・
useMemoを用いてReactでの重い計算をキャッシュする。 - ・
Mapオブジェクトを活用し、二重ループの計算量をO(N+M)に削減する。 - ・カーソルベースのページネーションを導入し、取得件数を制御する。
// Result
筆者が運用するSaaSにおいて、アンチパターンを解消した結果、劇的な改善が見られた。定量的な成果は以下の通りである。
- ・プロジェクト一覧の表示速度が230msから80msへ向上。
- ・提案エンジンの検索速度が450msから60msへ短縮。
- ・月次集計処理が1500msから200msへ大幅に改善。
Senior Engineer Insight
> 「動くコード」から「スケールするコード」への転換点となる知見だ。特にDBへの負荷は、トラフィック増大時に致命的なコスト増を招く。フロントエンドの計算量も、デバイス性能に依存するため無視できない。レビュー時にこれらをチェックリスト化し、開発プロセスに組み込むべきだ。計測を習慣化し、数字に基づいて改善を行う姿勢が不可欠である。