diff --git a/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedKernelPass.php b/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedKernelPass.php index 845867a..ce8ed2b 100644 --- a/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedKernelPass.php +++ b/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedKernelPass.php @@ -36,16 +36,24 @@ public function process(ContainerBuilder $container) { $middlewares = []; $priorities = []; + $quick_rabbits = []; foreach ($container->findTaggedServiceIds('http_middleware') as $id => $attributes) { $priorities[$id] = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0; $middlewares[$id] = $container->getDefinition($id); + $quick_rabbits[$id] = !empty($attributes[0]['quick_rabbit']); } - array_multisort($priorities, SORT_ASC, $middlewares); + array_multisort($priorities, SORT_ASC, $middlewares, $quick_rabbits); $decorated_id = 'http_kernel.basic'; $middlewares_param = [new Reference($decorated_id)]; + + $quickest_rabbit = array_search(TRUE, array_reverse($quick_rabbits, TRUE), TRUE); + if ($quickest_rabbit) { + $container->getDefinition($decorated_id)->setLazy(TRUE); + } + foreach ($middlewares as $id => $decorator) { // Prepend a reference to the middlewares container parameter. array_unshift($middlewares_param, new Reference($id)); @@ -55,6 +63,13 @@ public function process(ContainerBuilder $container) { array_unshift($arguments, new Reference($decorated_id)); $decorator->setArguments($arguments); + if ($quickest_rabbit === $id) { + $quickest_rabbit = FALSE; + } + elseif ($quickest_rabbit) { + $decorator->setLazy(TRUE); + } + $decorated_id = $id; } diff --git a/core/modules/page_cache/page_cache.services.yml b/core/modules/page_cache/page_cache.services.yml index bbddfa7..68ea5df 100644 --- a/core/modules/page_cache/page_cache.services.yml +++ b/core/modules/page_cache/page_cache.services.yml @@ -3,4 +3,4 @@ services: class: Drupal\page_cache\StackMiddleware\PageCache arguments: ['@cache.render', '@page_cache_request_policy', '@page_cache_response_policy'] tags: - - { name: http_middleware, priority: 200 } + - { name: http_middleware, priority: 200, quick_rabbit: true }