Project

General

Profile

Task #89058 » typo3-core-speedup-slug-resolution-with-many-sites.patch

Xavier Perseguers, 2023-04-13 08:24

View differences:

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;
}
(2-2/3)