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的插件