前提
- Laravelを使ったアプリ開発において、パフォーマンス改善のために気をつけていることの備忘録です
- ゲームアプリ開発を前提にしています
心がけていること
その1
- select文(->getメソッド)は不必要なフィールドまで呼び出さない
- 処理で必要なgetメソッドのみを引数に指定するようにする
その2
- 配列変数を指定する場合には ' で囲む(例:hoge['apple'])
その3
- 頻繁にIN句するフィールドにはINDEXを貼る
その4
- MySQLは1テーブルにつき1つのINDEXしか使用されない
- 同時に複数のフィールドのINDEXを使う場合は複合INDEXを作成する
- 複合INDEXは順番が大事なので使用する場合は注意が必要
その5
- JOINはしない
- テーブルの結合は2つのSELECTを飛ばし、foreachで結合する
// 連想配列への要素の追加
foreach ($hogeList as $hoge) {
$hoge['追加するキー'] = 追加したい内容
}
その6
- array_pushは使わない
- $array[] = hogehoge; 形式の配列追加を行う
その7
- 比較演算は厳密な比較を行う(=== または !== など)
その8
- for()やforeach()などの外で出来ることは外で先に行う
その9
- コレクションメソッドはforeachで処理するよりも速度が遅い
- 速度が求められる部分や対象となる配列が多い場合はforeachで処理した方が良い
- コレクションは可読性の面でとても優れているのでケースバイケースで扱う
参考
- パフォーマンス1000%UP!PHPでMySQLのDB処理を行うと重いときに行うパフォーマンス施策~基礎編~
- 複合Index
- PHP 高速化に関するメモ書き
- Laravelの Illuminate\Support\Collection と foreach の速度の比較
- Laravel のマイグレーションで複合インデックスにしつつインデックス名を指定する方法