Laravel技巧库

Debug Bar调优N+1查询

此课程是收费课程,请先购买或加入会员后再访问。

今天要介绍的是在laravel中如何正确的调试数据,需要用到的是debugbar这样一个小工具。https://github.com/barryvdh/laravel-debugbar

先用命令装上

composer require barryvdh/laravel-debugbar --dev

生成debugbar的配置文件

php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"

这些配置文件,一般没有特殊需要,基本上都不需要修改。重启服务,刷新后,可以看到底部就出现了这么一个调试工具了。

打开一看,里面有很多我们开发需要用到的信息。例如 加载的模板路由信息session,还有最有用的就是这里的queries,里面可以看到通过模型真实执行的sql代码。

n+1查询性能调优

那我们现在就用这个工具,来优化调试一下查询代码。

访问活动列表,看到queries,出现了很多userscommets表的查询,这是因为我们这里的每一条活动列表中,都要去查询它自己对应的用户头像、用户名称,还有对应评论的数据。

现在数据还是比较少的,这里一共也只有几条记录。如果数据比较多,这就非常的影响性能了。我们把这种情况就叫做n+1次查询

关于这个问题,在laravel的文档中也有描述,https://laravel.com/docs/5.5/eloquent-relationships#eager-loading

解决的方法也很简单,IssuesController

public function index()
{
    $issues = Issue::with('user', 'comments')->orderBy('created_at', 'desc')->paginate(5);
    return view('issues.index')->with('issues', $issues);
}

再来看queries的信息,之前的多条查询,就都变成了一条。

WelcomeController中也修改一下

public function index()
{
    $issues = Issue::with('user', 'comments')->orderBy('created_at', 'desc')->take(2)->get();
    return view('welcome.index')->with('issues', $issues);
}

现在就注册ITFun.tv会员
持续关注IT界最新技术,随时更新相关课程。在线学习IT课程或直接报名参加线下武汉PHP、Web前端培训。

仅仅30秒钟就可以简单注册

会员注册(免费)
×