DEV Community

Cover image for New php router is 25 times faster then klein router
alexdodonov
alexdodonov

Posted on • Edited on

New php router is 25 times faster then klein router

Hi, all! Recently I have decided to measure speed of my router

And results were quite interesting.

I have measured the productivity in two tests:

  1. Static routes without any regexp parsing or variables in URI

  2. URI with variables

The first test for the Mezon/Router:

// static routes

$routerTest1 = new \Mezon\Router\Router();

$routerTest1->addRoute('/static', function () {
  return 'static';
}, 'GET');

$iterationCount1 = 100000;

$startTime1 = microtime(true);

for ($i = 0; $i < $iterationCount1; $i ++) {
  $routerTest1->callRoute('/static');
}

$endTime1 = microtime(true);
Enter fullscreen mode Exit fullscreen mode

And the second test:

// parametrized routes

$routerTest2 = new \Mezon\Router\Router();

$routerTest2->addRoute('/[i:id]', function () {
  return 'param';
}, 'GET');

$iterationCount2 = 100000;

$startTime2 = microtime(true);

for ($i = 0; $i < $iterationCount2; $i ++) {
  $routerTest2->callRoute('/1');
}

$endTime2 = microtime(true);
Enter fullscreen mode Exit fullscreen mode

For the klein/klein router it is almost the same:

// static routes

$_SERVER['REQUEST_URI'] = '/static';

$routerTest1 = new \Klein\Klein();

$routerTest1->respond('GET', '/static', **function** () {
  return 'static';
});

$iterationCount1 = 10000;

$startTime1 = microtime(true);

for ($i = 0; $i < $iterationCount1; $i ++) {
  $routerTest1->dispatch(null,null,true,\Klein\Klein::DISPATCH_CAPTURE_AND_RETURN);
}

$endTime1 = microtime(true);
Enter fullscreen mode Exit fullscreen mode

And the second one:

// parametrized routes

$_SERVER['REQUEST_URI'] = '/1';

$routerTest2 = new \Klein\Klein();

$routerTest2->respond('GET', '/[i:id]', function () {
  return 'static';
});

$iterationCount2 = 10000;

$startTime2 = microtime(true);

for ($i = 0; $i < $iterationCount2; $i ++) {
  $routerTest2->dispatch(null,null,true,\Klein\Klein::*DISPATCH_CAPTURE_AND_RETURN*);
}

$endTime2 = *microtime(true);
Enter fullscreen mode Exit fullscreen mode

I have got the following results:

table

chart

As you can see - Mezon router is up to 25 times faster than Klein router.

Learn more

More information can be found here:

Twitter
Mezon Framework

What is mezon/router?

mezon/router now is:

  • framework for routing with 100% code coverage
  • 10.0 points on scrutinizer-ci.com
  • router is a part of the Mezon Project

Repo on github.com: https://github.com/alexdodonov/mezon-router

It will be great if you will contribute something to this project. Documentation, sharing the project in your social media, bug fixing, refactoring, or even submitting issue with question or feature request. Thanks anyway )

Top comments (6)

Collapse
 
grocker42 profile image
Grocker

But why are there such a big differences in performance?

Collapse
 
alexdodonov profile image
alexdodonov

mezon/router provides only basic routing functionality. it made possible to use more simple URL parser and find necessary route handler faster.

Collapse
 
abhinav1217 profile image
Abhinav Kulshreshtha

When you say only basic routing functionality, What are you not providing. I like the idea of automatic url generation with action-suffix. I mainly use a rest call to graphql-rest hybrid endpoint. Which means that uri strings are dynamically generated, e.g books/authors/bio and book/authors/bio/contact. Currently I am using slim framework with its default fastroute. Is your router PSR-7 compliment?

Thread Thread
 
alexdodonov profile image
alexdodonov

It is not yet PSR-7 compliment. But I hope it will be. Soon )

Collapse
 
alexdodonov profile image
alexdodonov

Any comments people?

Collapse
 
wesley_teixeira profile image
Wesley Teixeira

I dare you to beat me to this router in the repository:

github.com/spiral/router