Loading core/lib/Drupal/Core/Render/Placeholder/CachedStrategy.php +35 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,41 @@ public function __construct( * {@inheritdoc} */ public function processPlaceholders(array $placeholders) { return $this->renderCache->getMultiple($placeholders); $return = $this->renderCache->getMultiple($placeholders); if ($return) { $return = $this->processNestedPlaceholders($return); } return $return; } /** * Fetch any nested placeholders from cache. * * Placeholders returned from cache may have placeholders in #attached, which * can themselves be fetched from the cache. By recursively processing the * placeholders here, we're able to use multiple cache get to fetch the cache * items at each level of recursion. */ private function processNestedPlaceholders(array $placeholders): array { $sets = []; foreach ($placeholders as $key => $placeholder) { if (!empty($placeholder['#attached']['placeholders'])) { $sets[] = $placeholder['#attached']['placeholders']; } } if ($sets) { $cached = $this->renderCache->getMultiple(...array_merge($sets)); if ($cached) { $cached = $this->processNestedPlaceholders($cached); foreach ($placeholders as $key => $placeholder) { if (!empty($placeholder['#attached']['placeholders'])) { $placeholders[$key]['#attached']['placeholders'] = array_replace($placeholder['#attached']['placeholders'], $cached); } } } } return $placeholders; } } core/modules/navigation/tests/src/FunctionalJavascript/PerformanceTest.php +2 −2 Original line number Diff line number Diff line Loading @@ -73,14 +73,14 @@ public function testLogin(): void { $expected = [ 'QueryCount' => 4, 'CacheGetCount' => 49, 'CacheGetCount' => 48, 'CacheGetCountByBin' => [ 'config' => 11, 'data' => 4, 'discovery' => 10, 'bootstrap' => 6, 'dynamic_page_cache' => 1, 'render' => 16, 'render' => 15, 'menu' => 1, ], 'CacheSetCount' => 2, Loading Loading
core/lib/Drupal/Core/Render/Placeholder/CachedStrategy.php +35 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,41 @@ public function __construct( * {@inheritdoc} */ public function processPlaceholders(array $placeholders) { return $this->renderCache->getMultiple($placeholders); $return = $this->renderCache->getMultiple($placeholders); if ($return) { $return = $this->processNestedPlaceholders($return); } return $return; } /** * Fetch any nested placeholders from cache. * * Placeholders returned from cache may have placeholders in #attached, which * can themselves be fetched from the cache. By recursively processing the * placeholders here, we're able to use multiple cache get to fetch the cache * items at each level of recursion. */ private function processNestedPlaceholders(array $placeholders): array { $sets = []; foreach ($placeholders as $key => $placeholder) { if (!empty($placeholder['#attached']['placeholders'])) { $sets[] = $placeholder['#attached']['placeholders']; } } if ($sets) { $cached = $this->renderCache->getMultiple(...array_merge($sets)); if ($cached) { $cached = $this->processNestedPlaceholders($cached); foreach ($placeholders as $key => $placeholder) { if (!empty($placeholder['#attached']['placeholders'])) { $placeholders[$key]['#attached']['placeholders'] = array_replace($placeholder['#attached']['placeholders'], $cached); } } } } return $placeholders; } }
core/modules/navigation/tests/src/FunctionalJavascript/PerformanceTest.php +2 −2 Original line number Diff line number Diff line Loading @@ -73,14 +73,14 @@ public function testLogin(): void { $expected = [ 'QueryCount' => 4, 'CacheGetCount' => 49, 'CacheGetCount' => 48, 'CacheGetCountByBin' => [ 'config' => 11, 'data' => 4, 'discovery' => 10, 'bootstrap' => 6, 'dynamic_page_cache' => 1, 'render' => 16, 'render' => 15, 'menu' => 1, ], 'CacheSetCount' => 2, Loading