Skip to content

Commit 0e89bd2

Browse files
committed
Micro-optimisation to index middlewares only after dispatching
1 parent 11d7161 commit 0e89bd2

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

src/Symfony/Component/Message/MessageBus.php

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,19 @@
1717
*/
1818
class MessageBus implements MessageBusInterface
1919
{
20+
private $middlewares;
21+
2022
/**
21-
* @var MiddlewareInterface[]
23+
* @var MiddlewareInterface[]|null
2224
*/
23-
private $middlewares;
25+
private $indexedMiddlewares;
2426

2527
/**
2628
* @param MiddlewareInterface[]|iterable $middlewares
2729
*/
2830
public function __construct(iterable $middlewares = array())
2931
{
30-
$this->middlewares = is_array($middlewares) ? array_values($middlewares) : iterator_to_array($middlewares, false);
32+
$this->middlewares = $middlewares;
3133
}
3234

3335
/**
@@ -40,11 +42,15 @@ public function dispatch($message)
4042

4143
private function callableForNextMiddleware(int $index): callable
4244
{
43-
if (!isset($this->middlewares[$index])) {
45+
if (null === $this->indexedMiddlewares) {
46+
$this->indexedMiddlewares = is_array($this->middlewares) ? array_values($this->middlewares) : iterator_to_array($this->middlewares, false);
47+
}
48+
49+
if (!isset($this->indexedMiddlewares[$index])) {
4450
return function () {};
4551
}
4652

47-
$middleware = $this->middlewares[$index];
53+
$middleware = $this->indexedMiddlewares[$index];
4854

4955
return function ($message) use ($middleware, $index) {
5056
return $middleware->handle($message, $this->callableForNextMiddleware($index + 1));

0 commit comments

Comments
 (0)