#概要
相生葵の Advent Calendar 2020 5日目の記事です。
自分がしている速度改善方法について書きます。
#手順
- 速度計測のためのログを仕込む
- ログからボトルネックを探す
- 1、2を繰り返してボトルネックを明確にする
- 何が原因になっているか考える
- 原因に対して解決策を出す
- 解決策を掘り下げる
- 改善する
##はじめに
クライアント側の場合、必ず速度計測は実機で行います。
実機ごとにボトルネックになっている箇所が違ったりするためです。
サーバ側は、サーバのスペック、データベースのデータ量などが本番と近い環境でする方がより近い速度が計測できます。
##1. 速度計測のためのログを仕込む
###目的
ボトルネック箇所を探すためです。
###理由
コードを見てどこがボトルネックになっているか分かればいいですが、ログを仕込んで確認する方が確実です。
問題個所で大きな割合がかかっている箇所を潰せば、一発で大部分の時間を短縮することを期待できます。
ただ闇雲に改善していっても、本当に改善して効果がある箇所かは分からなかったりします。
###ログの入れ方
初めは大まかに入れて、だんだん範囲を絞って細かく入れていきます。
##2. ログからボトルネックを探す
出力されたログから、時間がかかっている箇所を見つけます。
##3. 1,2を繰り返してボトルネックを明確にする
- ログを仕込む
- 1の中で遅い場所に絞ってさらにログを細かく入れる
1,2を繰り返してボトルネックを明確にします。
##4. 何が原因になっているか考える
3まででボトルネック箇所は分かっているので原因を考えます。
- ループの重なりで計算量が大きくなっていないか
- 無駄な処理をしていないか
- クエリ発行数が膨らんでいないか
など
##5. 原因に対して解決策を出す
4で出した原因に対する解決策を考えます。
##6. 解決策を掘り下げる
解決策に対して以下を考えます。
- 既存の処理と動きが変わる部分はないか
- 動きが変わる場合は、その動作に変えてしまって問題ないか
この時点で疑問点や懸念点が出てきたら、潰しておきます。
自分で解決できそうなものは調査などをして、他の人に確認しなければいけないものに関しては確認をします。
##7. 改善する
6で懸念点なども潰しているので、後は決めた解決策で改善していきます。
解決策が本当に効果があるのかは、速度計測を行って判断していきます。
#補足
大きめの速度改善については、ボトルネック箇所が複数あることがあるので計測を行って、対応する優先度をつけます。
時間がかかっている箇所ほど、効果が出やすいのでかかっている時間を優先度にします。