php代碼優化
應避免在php foreach裏面進行sql查詢
以下代碼示例使用了laravel的操作數據庫api,eloquent orm
foreach裏面執行兩次sql查詢
foreach ($datas as $_v) {
$uid = $_v->uid;
$_v->user_name = User::find($uid)->username;
$_v->user_avatar = User::find($uid)->avatar;
}
foreach裏面執行一次sql查詢
foreach ($datas as $_v) {
$user = User::find($_v->uid));
$_v->user_name = $user->username;
$_v->user_avatar = $user->avatar;
}
將sql查詢移到foreach外面
上面兩個方法都不可避免的在foreach裏面執行了數據庫查詢
**應避免在foreach中執行sql查詢**
此處我的做法是再加一層foreach+if來代替sql查詢
// 本質上是將foreach中的查詢移到外面
foreach ($tmp_data_arr as $value) {
foreach ($datas as $_v) {
if ($_v->uid === $value['id']) {
$_v->user_name = $value['username'];
$_v->user_avatar = $value['avatar'];
}
}
}
小結
return $datas;
經過簡單的優化:時間(ms):290 -> 230 -> 180
ps
postman是一款很好用的chrome調試restful api的插件