Новый бенчмарк: Mezon Router против Phroute
В общем-то как и ранее мы рассматриваем два кейса:
1. http сервер принимает запрос от клиента, запускает php скрипт, который собственно и обрабатывает этот запрос, затем выгружает скрипт и все его данные из памяти. Все последующие запросы обрабатываются в таком же ключе. При таком раскладе критично важно запускать скрипт как можно быстрее, поэтому у нас нет времени, чтобы долго готовить роуты к работе. Просто потому что все это будет благополучно выгружено из памяти как только скрипт отработает;
2. запускается php скрипт, инициализирует все необходимые объекты и структуры (роутер естественно тоже) и затем запускает цикл обработки запросов. Так, например работает react-php. Этот кейс принципиально отличается от предыдущего, потому что тут мы уже можем потратить достаточно длительное время на инициализацию, лишь бы потом работало максимально быстро.
Код бэнчмарка для первого кейса
// static routes for ($i = 0; $i < MezonBenchmarkBase::$iterationsAmount; $i ++) { $router = MezonBenchmarkRouteGenerator::generatePhrouteStaticRoutes(1000); $router->dispatch('GET', parse_url('/static/' . rand(0, 1000 - 1), PHP_URL_PATH)); } // non-static routes for ($i = 0; $i < MezonBenchmarkBase::$iterationsAmount; $i ++) { $router = MezonBenchmarkRouteGenerator::generatePhrouteNonStaticRoutes(1000); $router->dispatch('GET', parse_url('/param/' . rand(0, 1000 - 1) . '/1', PHP_URL_PATH)); }Код бэнчмарка для второго кейса
// static routes $router = MezonBenchmarkRouteGenerator::generatePhrouteStaticRoutes(1000); $startTime = microtime(true); for ($i = 0; $i < MezonBenchmarkBase::$iterationsAmount; $i ++) { $router->dispatch('GET', parse_url('/static/' . rand(0, 1000 - 1), PHP_URL_PATH)); } return microtime(true) - $startTime; // non-static routes $router = MezonBenchmarkRouteGenerator::generatePhrouteNonStaticRoutes(1000); $startTime = microtime(true); for ($i = 0; $i < MezonBenchmarkBase::$iterationsAmount; $i ++) { $router->dispatch('GET', parse_url('/param/' . rand(0, 1000 - 1) . '/1', PHP_URL_PATH)); } return microtime(true) - $startTime;Результаты
Что такое Mezon Router?
mezon/router это:
- фреймворк для роутинга со 100% покрытием кода;
- 10.0 баллов на scrutinizer-ci.com
- роутер является частью проекта Mezon
Репа на github.com: https://github.com/alexdodonov/mezon-router