Skip to content

Commit e6f26fa

Browse files
committed
Added the benchmarks using Athletic framework
1 parent 8b73dd4 commit e6f26fa

11 files changed

+343
-2
lines changed

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,14 @@ and interrupt execution of listeners.
1616

1717
- File issues at https://github.com/zendframework/zend-eventmanager/issues
1818
- Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-eventmanager
19+
20+
## Benchmark
21+
22+
We provided a set of benchmarks using the [Athletic](https://github.com/polyfractal/athletic)
23+
framework. The benchmarks of zend-eventmanager are store in the folder `/benchmarks`.
24+
25+
To execute the benchmarks you can run the following command:
26+
27+
```
28+
vendor/bin/athletic -p benchmarks
29+
```
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace ZendBench\EventManager;
4+
5+
use Zend\EventManager\SharedEventManager;
6+
use Zend\EventManager\EventManager;
7+
use Athletic\AthleticEvent;
8+
9+
class MultipleEventIndividualSharedListener extends AthleticEvent
10+
{
11+
use TraitEventBench;
12+
13+
private $sharedEvents;
14+
15+
private $events;
16+
17+
public function setUp()
18+
{
19+
$identifiers = $this->getIdentifierList();
20+
$this->sharedEvents = new SharedEventManager();
21+
foreach ($this->getEventList() as $event) {
22+
$this->sharedEvents->attach($identifiers[0], $event, $this->generateCallback());
23+
}
24+
$this->events = new EventManager();
25+
$this->events->setSharedManager($this->sharedEvents);
26+
$this->events->setIdentifiers($identifiers[0]);
27+
}
28+
29+
/**
30+
* Trigger the event list
31+
*
32+
* @iterations 5000
33+
*/
34+
public function trigger()
35+
{
36+
foreach ($this->getEventList() as $event) {
37+
$this->events->trigger($event);
38+
}
39+
}
40+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace ZendBench\EventManager;
4+
5+
use Zend\EventManager\EventManager;
6+
use Athletic\AthleticEvent;
7+
8+
class MultipleEventLocalListener extends AthleticEvent
9+
{
10+
use TraitEventBench;
11+
12+
public function setUp()
13+
{
14+
$this->events = new EventManager();
15+
}
16+
17+
/**
18+
* Attach and trigger the event list
19+
*
20+
* @iterations 5000
21+
*/
22+
public function trigger()
23+
{
24+
foreach ($this->getEventList() as $event) {
25+
$this->events->attach($event, $this->generateCallback());
26+
$this->events->trigger($event);
27+
}
28+
}
29+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
namespace ZendBench\EventManager;
4+
5+
use Zend\EventManager\SharedEventManager;
6+
use Zend\EventManager\EventManager;
7+
use Athletic\AthleticEvent;
8+
9+
class MultipleEventMultipleLocalAndSharedListener extends AthleticEvent
10+
{
11+
use TraitEventBench;
12+
13+
private $sharedEvents;
14+
15+
private $events;
16+
17+
public function setUp()
18+
{
19+
$identifiers = $this->getIdentifierList();
20+
$this->sharedEvents = new SharedEventManager();
21+
foreach ($this->getIdentifierList() as $identifier) {
22+
foreach ($this->getEventList() as $event) {
23+
$this->sharedEvents->attach($identifier, $event, $this->generateCallback());
24+
}
25+
}
26+
$this->events = new EventManager();
27+
$this->events->setSharedManager($this->sharedEvents);
28+
$this->events->setIdentifiers(array_filter($identifiers, function ($value) {
29+
return ($value !== '*');
30+
}));
31+
}
32+
33+
/**
34+
* Attach and trigger the event list
35+
*
36+
* @iterations 5000
37+
*/
38+
public function trigger()
39+
{
40+
foreach ($this->getEventList() as $event) {
41+
for ($i = 0; $i < $this->numListeners; $i += 1) {
42+
$this->events->attach($event, $this->generateCallback());
43+
}
44+
$this->events->trigger($event);
45+
}
46+
}
47+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace ZendBench\EventManager;
4+
5+
use Zend\EventManager\SharedEventManager;
6+
use Zend\EventManager\EventManager;
7+
use Athletic\AthleticEvent;
8+
9+
class MultipleEventMultipleSharedListener extends AthleticEvent
10+
{
11+
use TraitEventBench;
12+
13+
private $sharedEvents;
14+
15+
private $events;
16+
17+
public function setUp()
18+
{
19+
$identifiers = $this->getIdentifierList();
20+
$this->sharedEvents = new SharedEventManager();
21+
foreach ($this->getIdentifierList() as $identifier) {
22+
foreach ($this->getEventList() as $event) {
23+
$this->sharedEvents->attach($identifier, $event, $this->generateCallback());
24+
}
25+
}
26+
$this->events = new EventManager();
27+
$this->events->setSharedManager($this->sharedEvents);
28+
$this->events->setIdentifiers(array_filter($identifiers, function ($value) {
29+
return ($value !== '*');
30+
}));
31+
}
32+
33+
/**
34+
* Trigger the event list
35+
*
36+
* @iterations 5000
37+
*/
38+
public function trigger()
39+
{
40+
foreach ($this->getEventList() as $event) {
41+
$this->events->trigger($event);
42+
}
43+
}
44+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace ZendBench\EventManager;
4+
5+
use Zend\EventManager\EventManager;
6+
use Athletic\AthleticEvent;
7+
8+
class SingleEventMultipleListener extends AthleticEvent
9+
{
10+
use TraitEventBench;
11+
12+
private $events;
13+
14+
public function setUp()
15+
{
16+
$this->events = new EventManager();
17+
for ($i = 0; $i < $this->numListeners; $i++) {
18+
$this->events->attach('dispatch', $this->generateCallback());
19+
}
20+
}
21+
22+
/**
23+
* Trigger the dispatch event
24+
*
25+
* @iterations 5000
26+
*/
27+
public function trigger()
28+
{
29+
$this->events->trigger('dispatch');
30+
}
31+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace ZendBench\EventManager;
4+
5+
use Zend\EventManager\SharedEventManager;
6+
use Zend\EventManager\EventManager;
7+
use Athletic\AthleticEvent;
8+
9+
class SingleEventMultipleSharedListener extends AthleticEvent
10+
{
11+
use TraitEventBench;
12+
13+
private $sharedEvents;
14+
15+
private $events;
16+
17+
public function setUp()
18+
{
19+
$identifiers = $this->getIdentifierList();
20+
$this->sharedEvents = new SharedEventManager();
21+
for ($i = 0; $i < $this->numListeners; $i += 1) {
22+
$this->sharedEvents->attach($identifiers[0], 'dispatch', $this->generateCallback());
23+
}
24+
$this->events = new EventManager();
25+
$this->events->setSharedManager($this->sharedEvents);
26+
$this->events->setIdentifiers($identifiers[0]);
27+
}
28+
29+
/**
30+
* Trigger the dispatch event
31+
*
32+
* @iterations 5000
33+
*/
34+
public function trigger()
35+
{
36+
$this->events->trigger('dispatch');
37+
}
38+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace ZendBench\EventManager;
4+
5+
use Zend\EventManager\EventManager;
6+
use Athletic\AthleticEvent;
7+
8+
class SingleEventSingleListener extends AthleticEvent
9+
{
10+
use TraitEventBench;
11+
12+
private $events;
13+
14+
public function setUp()
15+
{
16+
$this->events = new EventManager();
17+
$this->events->attach('dispatch', $this->generateCallback());
18+
}
19+
20+
/**
21+
* Trigger the dispatch event
22+
*
23+
* @iterations 5000
24+
*/
25+
public function trigger()
26+
{
27+
$this->events->trigger('dispatch');
28+
}
29+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace ZendBench\EventManager;
4+
5+
use Zend\EventManager\SharedEventManager;
6+
use Zend\EventManager\EventManager;
7+
use Athletic\AthleticEvent;
8+
9+
class SingleEventSingleSharedListener extends AthleticEvent
10+
{
11+
use TraitEventBench;
12+
13+
private $sharedEvents;
14+
15+
private $events;
16+
17+
public function setUp()
18+
{
19+
$identifiers = $this->getIdentifierList();
20+
$this->sharedEvents = new SharedEventManager();
21+
$this->sharedEvents->attach($identifiers[0], 'dispatch', $this->generateCallback());
22+
$this->events = new EventManager();
23+
$this->events->setSharedManager($this->sharedEvents);
24+
$this->events->setIdentifiers($identifiers[0]);
25+
}
26+
27+
/**
28+
* Trigger the dispatch event
29+
*
30+
* @iterations 5000
31+
*/
32+
public function trigger()
33+
{
34+
$this->events->trigger('dispatch');
35+
}
36+
}

benchmarks/TraitEventBench.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
namespace ZendBench\EventManager;
3+
4+
trait TraitEventBench {
5+
6+
private $numListeners = 50;
7+
8+
private function generateCallback()
9+
{
10+
return function ($e) {};
11+
}
12+
13+
private function getEventList()
14+
{
15+
return [
16+
'dispatch',
17+
'dispatch.post',
18+
'*',
19+
];
20+
}
21+
22+
private function getIdentifierList()
23+
{
24+
return [
25+
'Zend\Stdlib\DispatchableInterface',
26+
'Zend\Mvc\Controller\AbstractController',
27+
'Zend\Mvc\Controller\AbstractActionController',
28+
'Zend\Mvc\Controller\AbstractRestfulController',
29+
'ZF\Rest\RestController',
30+
'CustomRestController',
31+
'*',
32+
];
33+
}
34+
}

0 commit comments

Comments
 (0)