Pesquisas XPath menos lentas e sem distinção entre maiúsculas e minúsculas em PHP

PHP depende de libxml2 como seu analisador XML subjacente. libxml2 oferece suporte a XPath 1.0, mas não a versões mais recentes. Por causa disso, a realização de consultas que não diferenciam maiúsculas de minúsculas (como quando você está analisando um feed RSS não compatível) precisa ser feita no espaço do usuário.

Consultar dados de uma estrutura XML (com DOMDocument) pode ser até 100 × (ou seja, 10000%) mais rápido usando consultas XPath bem elaboradas em PHP “normal” (por exemplo, looping, ifcondicionais). A maioria das sugestões na Internet diz para usar a translate()função XPath para converter o alfabeto inteiro, mas isso pode ser 8 × MAIS LENTO (por exemplo, 800%). Podemos tornar isso cerca de 35% menos lento para que seja apenas 4,5–5 × mais lento (450–500%) se convertermos apenas as letras que estão realmente na palavra.

Este desempenho ainda não é ótimo, mas é definitivamente melhor. Testado em PHP 7.2.

<?php
$word
= 'rss';
$elementLetters
= count_chars($word, 3);
$lettersLower
= mb_strtolower($elementLetters);
$lettersUpper
= mb_strtoupper($elementLetters);

$query
= sprintf(
'/*[translate(name(), '%s', '%s') = '%s']',
$lettersUpper
,
$lettersLower
,
$word

);

# /*[translate(name(), 'RS', 'rs') = 'rss'
$results
= $domxpath->query($query);