[扩展推荐] Laravel Query Detector 数据模型查询的 N+1 问题捕杀神器
Marcel Pociot 开发的 Laravel Query Detector 组件用来检测 N+1 查询问题。应用运行于 debug
模式时,该组件将自动监测所有 N+1 查询。
在开发应用过程中,该组件将实时监测所有查询,并以 JavaScript alert()
的方式通知监测到的 N+1 查询。当然,你也可以修改配置文件,将报告发送到 Laravel 日志。
以下是默认配置,你可以直接使用或者覆盖配置项:
<?php
return [
/*
* 启用或关闭查询监测
* 如果设置为 "null", 将使用 app.debug 配置值
*/
'enabled' => env('QUERY_DETECTOR_ENABLED', null),
/*
* N + 1查询检测的阈值级别。如果关联查询超过此阀值,
* 监测器将发出通知
*/
'threshold' => 1,
/*
* 关联模型白名单
*
* 现在,你需要将模型关系定义为模型上的类名和属性名
* 因此,如果 「Author」模型有一个指向「Post」类的「posts」关联,也需要添加进来
* 「posts」属性和「Post」类,由于关系可以用多种途径解析
*/
'except' => [
//Author::class => [
// Post::class,
// 'posts',
//]
],
/*
* 定义输出形式,可用的有:
*
* Alert:
* 页面展示一个 alert
* \BeyondCode\QueryDetector\Outputs\Alert::class
*
* Log:
* 将 N+1 查询写入 Laravel 日志文件
* \BeyondCode\QueryDetector\Outputs\Log::class
*/
'output' => \BeyondCode\QueryDetector\Outputs\Alert::class,
];
例如,如果你需要更新配置发送 N+1 问题到日志,可以按照如下配置:
'output' => \BeyondCode\QueryDetector\Outputs\Log::class
使用 composer 安装:
composer require beyondcode/laravel-query-detector --dev
值得注意的是,此配置文件将来可能发生改变,看起来这个版本在编写时像是预发布版本。
了解更多
你可以通过 GitHub 源码 了解更多关于此组件。
如果你不了解或需要复习 N+1 问题,我编写的 使用 Eager Loading 优化 Laravel Eloquent 查询 解释了 N+1 问题和使用 eager loading 如何优化应用,附加一个手动 N + 1查询实例演示并使用 eager loading 更新。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
本帖已被设为精华帖!
高认可度评论:
已经用上,类型设置为 alert ,会一直强迫你 fix 掉问题,简直是神奇哈
已经用上,类型设置为 alert ,会一直强迫你 fix 掉问题,简直是神奇哈