Главное Авторские колонки Вакансии Образование
389 0 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Новый бенчмарк: Mezon PHP Router до 219 раз быстрее чем Sunrise Router

Предлагаю вашему вниманию новый бенчмарк своего роутера.
Мнение автора может не совпадать с мнением редакции

У нас как и в прошлых статьях будет по два кейса для каждого роутера:

1. http сервер принимает запрос от клиента, запускает php скрипт, который собственно и обрабатывает этот запрос, затем выгружает скрипт и все его данные из памяти. Все последующие запросы обрабатываются в таком же ключе. При таком раскладе критично важно запускать скрипт как можно быстрее, поэтому у нас нет времени, чтобы долго готовить роуты к работе. Просто потому что все это будет благополучно выгружено из памяти как только скрипт отработает;

2. запускается php скрипт, инициализирует все необходимые объекты и структуры (роутер естественно тоже) и затем запускает цикл обработки запросов. Так, например работает react-php. Этот кейс принципиально отличается от предыдущего, потому что тут мы уже можем потратить достаточно длительное время на инициализацию, лишь бы потом работало максимально быстро.

Код бенчмарка для первого кейса

// статические роуты for ($i = 0; $i < MezonBenchmarkBase::$iterationsAmount; $i ++) { $_SERVER['REQUEST_URI'] = '/static/' . rand(0, 1000 - 1); $router = MezonBenchmarkRouteGenerator::generateSunriseStaticRoutes(1000); $request = SunriseHttpServerRequestServerRequestFactory::fromGlobals(); $router->handle($request); }// нестатические роуты for ($i = 0; $i < MezonBenchmarkBase::$iterationsAmount; $i ++) { $_SERVER['REQUEST_URI'] = '/param/' . rand(0, 1000 - 1) . '/1'; $router = MezonBenchmarkRouteGenerator::generateSunriseNonStaticRoutes(1000); $request = SunriseHttpServerRequestServerRequestFactory::fromGlobals(); $router->handle($request); }

Код бенчмарка для второго кейса

// статические роуты $router = MezonBenchmarkRouteGenerator::generateSunriseStaticRoutes(1000); $startTime = microtime(true); for ($i = 0; $i < MezonBenchmarkBase::$iterationsAmount; $i ++) { $_SERVER['REQUEST_URI'] = '/static/' . rand(0, 1000 - 1); $request = SunriseHttpServerRequestServerRequestFactory::fromGlobals(); $router->handle($request); } return microtime(true) - $startTime;// нестатические роуты $router = MezonBenchmarkRouteGenerator::generateSunriseNonStaticRoutes(1000); $startTime = microtime(true); for ($i = 0; $i < MezonBenchmarkBase::$iterationsAmount; $i ++) { $_SERVER['REQUEST_URI'] = '/param/' . rand(0, 1000 - 1) . '/1'; $request = SunriseHttpServerRequestServerRequestFactory::fromGlobals(); $router->handle($request); } return microtime(true) - $startTime;

Результаты профилирования


На этом скриншоте изображено количество обработанных роутов в секунду. Чем больше тем лучше. Плюс версии использованных в бенчмарках роутеров.

Как видно из скриншотов Mezon Router почти во всех тестах лучше чем конкуренты.

Что такое Mezon Router?

mezon/router это:

  1. фреймворк для роутинга со 100% покрытием кода;
  2. 10.0 баллов на scrutinizer-ci.com
  3. роутер является частью проекта Mezon

Репа на github.com: https://github.com/alexdodonov/mezon-router

Будет здорово, если вы поучаствуете в жизни проекта. Это может быть написание документации, рекомендации друзьям в социальных сетях, правка багов, рефакторинг, или даже запрос тикета на новую функциональность. В любом случае большое спасибо.

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем