wedesignit/laravel-performance

在生产之前优化您的代码

v1.0.1 2022-12-16 13:30 UTC

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',
    ];
}