Несмотря на то, что Slim является микро-фреймворком, а HLEB2 перестал быть с приставкой "микро", по привычке провожу сравнение производительности последнего с микро-фреймворками.
Как известно, измерение вывода Hello World у фреймворков дело поверхностное. Однако, можно попробовать нагрузить маршрутизатор большим количеством роутов и посмотреть, что из этого выйдет. Для испытаний взял последнюю на данный момент версию Slim Framework (v4.13.0) и HLEB2 (v2.0.12). Под капотом у Slim сторонний роутер nikic/fast-route (v1.3.0) так что, по сути, буду тестировать его. Этот маршрутизатор сделал Никита Попов, почитать про устройство можно здесь. Роутер HLEB2 основан на другом принципе (сегментация и кеширование), поэтому интересно, как эти две разные архитектуры поведут себя. Установив эти фреймворки в базовой минимальной комплектации в соседние папки на одном ПК, а также при поддержке php 8.2, создал им следующие аналогичные условия в маршрутах:
Slim
for($i = 0; $i < 10_000; $i++) {
$app->get("/page{$i}/{name{$i}}", function (Request $request, Response $response, $args) use ($i) {
$response->getBody()->write("Page {$i}");
return $response;
});
}
HLEB2
for($i = 0; $i < 10_000; $i++) {
Route::get("/page{$i}/{name{$i}}", "Page {$i}");
}
Потом запустил для каждого в браузере '/page8000/test', чтобы соблюсти чистоту эксперимента и не использовать крайние значения.
Итак. Надо сразу сказать, что первый запрос к HLEB2 был довольно долгим, около 7 секунд, это кешировались данные. Но для 10 000 роутов не так уж и много. Потом я сделал еще несколько запросов для обоих тестируемых фреймворков, повышая на единицу номер "страницы", чтобы значения "утряслись". Получилось, что показатели выполнения Slim оказались в промежутке 0.27 - 0.15 секунды, а HLEB2... 0.006 - 0.002 секунды, что является довольно значительным отрывом. Для HLEB2 это практически время использования одного роута в маршрутизации.
Вам скорее всего не понадобиться такое количество маршрутов в реальном проекте, но так как с одним роутом показатели у фреймворков были одинаковые, этот тест показывает, что чем больше маршрутов, тем эффективнее принцип реализованный во фреймворке HLEB2 и его маршрутизатор готов к значительным нагрузкам.
PS По показателям используемой пиковой памяти тоже большой разрыв для этого теста (напоминаю, что речь идет о 10 тысячах маршрутов):
Slim 24.57 MB против HLEB2 0.5 MB