wedesignit / laravel-performance
在生产之前优化您的代码
Requires
- php: ^7.3|^8.0
- illuminate/database: ^8.19|^9.0
- illuminate/support: ^8.19|^9.0
Requires (Dev)
- laravel/framework: ^8.19|^9.0
This package is auto-updated.
Last update: 2024-09-16 17:11:45 UTC
README
此性能包(目前)包含两个可配置的性能相关特性,您可以使用这些特性来识别应用程序中的潜在慢速部分
- 慢查询日志
- 强制预加载(仅在开发中使用!)
包含包
仅用于开发(务必阅读下面的注释)使用
composer require --dev wedesignit/laravel-performance
!! 注意,如果您在代码中使用了 ContainsUnEagerLoadableRelations
特性,这将导致生产中的错误。您可能希望不使用 --dev
选项要求包!!
在其他环境中使用它
composer require wedesignit/laravel-performance
发布配置
php artisan vendor:publish --provider="WeDesignIt\LaravelPerformance\Providers\LaravelPerformanceServiceProvider" --tag="config"
慢查询日志
配置
该包可以记录慢查询。为此,您可以选择以下任一操作
- 在配置中启用此功能或
- 设置环境键
ENABLE_SLOW_QUERY_LOGGING=true
然后,配置阈值:这是您认为查询为“慢”的毫秒数
记录
该包将查找用于记录的 query
通道。您可以在 config/logging.php
中创建自己的名为 query
的通道,以定义您希望慢查询记录的位置。如果您没有定义它,将使用以下配置临时创建 query
通道
[ 'driver' => 'daily', 'path' => storage_path('logs/query.log'), 'level' => env('LOG_LEVEL', 'debug'), 'days' => 2, ]
这意味着:默认情况下,慢查询将记录在带有日期前缀的 query.log
文件中(由于 daily
驱动程序),并在默认的日志文件夹 storage/app/logs
中保留 2 天。
记录内容
每个条目记录以下详细信息
- SQL
- 查询绑定
- 耗时
- 触发查询的代码文件
- 文件中代码所在的行
强制预加载
预加载关系可以通过消除后续查询来大大加快您的应用程序。通过启用强制预加载,当关系未进行预加载时,将抛出异常,这样您就可以决定是否应该预加载该关系。
注意:强制预加载不会在生产环境中启用!
配置
要启用此功能
- 在配置中启用此功能或
- 设置环境键
ENABLE_FORCED_EAGER_LOADING=true
之后,使用未预加载关系的页面或代码将抛出异常,告知您在哪个模型上未预加载哪个关系。
UnEagerLoadableRelations
某些关系不应该进行预加载,但根据上述设置也会引发异常。如果模型包含一个或多个无法或不应进行预加载的关系,请使用 ContainsUnEagerLoadableRelations
特性。
然后,在使用该特性的模型(s)上使用属性 array $without
防止在 $without
中抛出预加载异常的关系。
<?php use WeDesignIt\LaravelPerformance\Traits\ContainsUnEagerLoadableRelations; class Car { use ContainsUnEagerLoadableRelations; protected $with = [ 'windows', 'lights', ]; protected array $without = [ 'wheels', ]; }