Task #89058 » typo3-core-speedup-slug-resolution-with-many-sites.patch
Classes/Routing/PageSlugCandidateProvider.php 2023-04-13 09:40:15 → Classes/Routing/PageSlugCandidateProvider.php 2023-04-13 10:03:15 | ||
---|---|---|
namespace TYPO3\CMS\Core\Routing;
|
||
use Doctrine\DBAL\Connection;
|
||
use TYPO3\CMS\Core\Cache\CacheManager;
|
||
use TYPO3\CMS\Core\Context\Context;
|
||
use TYPO3\CMS\Core\Database\ConnectionPool;
|
||
use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
|
||
... | ... | |
$languages = [$languageId];
|
||
}
|
||
$searchLiveRecordsOnly = $this->context->getPropertyFromAspect('workspace', 'isLive');
|
||
$cache = GeneralUtility::makeInstance(CacheManager::class)->getCache('simple_api');
|
||
$cacheIdentifier = __FUNCTION__ . '-' . sha1(json_encode([
|
||
$this->site->getIdentifier(),
|
||
$searchLiveRecordsOnly,
|
||
$slugCandidates,
|
||
$languageId,
|
||
$excludeUids,
|
||
$languages
|
||
]));
|
||
$pages = $cache->get($cacheIdentifier);
|
||
if ($pages !== false) {
|
||
return $pages;
|
||
}
|
||
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
|
||
->getQueryBuilderForTable('pages');
|
||
$queryBuilder
|
||
... | ... | |
}
|
||
}
|
||
}
|
||
$cacheKeys = array_map(
|
||
function (int $uid) {
|
||
return 'pages%' . $uid;
|
||
},
|
||
array_column($pages, 'uid')
|
||
);
|
||
$cache->set($cacheIdentifier, $pages, $cacheKeys, 86400 * 90); // 90 days of caching
|
||
return $pages;
|
||
}
|