Оптимизация производительности Laravel с утилитой Benchmark
Базовое применение
Самый простой способ использования утилиты Benchmark — метод dd
, измеряющий и отображающий время выполнения:
use App\Models\User;
use Illuminate\Support\Benchmark;
Benchmark::dd(fn () => User::find(1));
В результате будет выведено время выполнения в миллисекундах, например: 0,1 ms
Сравнение нескольких сценариев
Можно сравнить производительность различных фрагментов кода:
Benchmark::dd([
'Scenario 1' => fn () => User::count(),
'Scenario 2' => fn () => User::all()->count(),
]);
В результате получится что-то вроде:
Scenario 1: 0.5 ms
Scenario 2: 20.0 ms
Это удобно, когда необходимо выбрать один из подходов к решению проблемы.
Итерации для точности
Для очень быстрых операций однократное выполнение не даст точной картины. Можно указать количество итераций выполнения операции:
Benchmark::dd(fn () => User::count(), iterations: 10); // 0.5 ms
Эта операция выполнится 10 раз и вернёт среднее время выполнения.
Получение результатов
Иногда необходим как результат операции, так и время её выполнения. Метод value
возвращает кортеж, содержащий и то, и другое:
[$count, $duration] = Benchmark::value(fn () => User::count());
echo "Found $count users in $duration milliseconds";
Реальный пример: Оптимизация запроса дашборда
Допустим, вы создаёте дашборд и необходимо получить статистику по пользователям. Есть два метода, и нужно узнать, какой из них быстрее:
use App\Models\User;
use Illuminate\Support\Benchmark;
$results = Benchmark::dd([
'Method 1' => fn () => User::whereHas('posts', '>', 5)->count(),
'Method 2' => fn () => User::withCount('posts')->having('posts_count', '>', 5)->count()
]);
// Output might look like:
// Method 1: 15.2 ms
// Method 2: 8.7 ms
Это наглядно демонстрирует, что метод 2 быстрее, и поможет принять взвешенное решение о том, какой запрос использовать в дашборде.
Утилита Laravel Benchmark — мощный инструмент для разработчиков, стремящихся оптимизировать приложения. Предоставляя простые в использовании методы для определения времени выполнения и сравнения кода, Benchmark позволяет принимать решения по оптимизации производительности на основе данных. Если вы занимаетесь тонкой настройкой запросов к базе данных, оптимизацией алгоритмов или просто интересуетесь последствиями различных подходов к коду для производительности, утилита Benchmark станет бесценным помощником в наборе инструментов Laravel.