update lock clucknut
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 14s
Build, Push and Deploy / build-and-push (push) Successful in 3m14s
Build, Push and Deploy / deploy-staging (push) Successful in 25s
Build, Push and Deploy / deploy-production (push) Has been skipped

This commit is contained in:
2026-04-18 20:32:18 +07:00
parent 4554035227
commit dcaf267458
3359 changed files with 153185 additions and 205489 deletions

View File

@@ -26,6 +26,8 @@
*/
class CssSelectorConverter
{
public static int $maxCachedItems = 1024;
private Translator $translator;
private array $cache;
@@ -62,6 +64,21 @@ public function __construct(bool $html = true)
*/
public function toXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string
{
return $this->cache[$prefix][$cssExpr] ??= $this->translator->cssToXPath($cssExpr, $prefix);
$cacheKey = $prefix."\0".$cssExpr;
if (isset($this->cache[$cacheKey])) {
// Move the item last in cache (LRU)
$value = $this->cache[$cacheKey];
unset($this->cache[$cacheKey]);
return $this->cache[$cacheKey] = $value;
}
if (\count($this->cache) >= self::$maxCachedItems) {
// Evict the oldest entry
unset($this->cache[array_key_first($this->cache)]);
}
return $this->cache[$cacheKey] = $this->translator->cssToXPath($cssExpr, $prefix);
}
}