Desempenho do seletor filho CSS vs. classe bloat

Eu estou tentando aprender a escrever CSS mais eficiente, particularmente porque estou trabalhando com um site bastante complexo que precisa renderizar rapidamente.

Estou acostumado a ter muito disso no meu HTML / CSS (principalmente porque gosto da legibilidade):

.spotlight {}
.spotlight ul {}
.spotlight ul li {}
.spotlight ul li a {color: #333;}

<div class="spotlight">
  <ul>
    <li><a href="">link</a></li>
    <li><a href="">link</a></li>
    <li><a href="">link</a></li>
  </ul>
</div>

Agora entendo que os navegadores executam o processo de correspondência de regras de CSS da direita para a esquerda, o que significa que<a> O elemento na última regra de CSS acima corresponderia primeiro a todos os links da página, levando à perda de desempenho.

Então, pelo que eu entendi, a solução amigável ao navegador seria ser mais específica e usar, por exemplo:

.spotlight {}
.spotlight-link {color: #333;}

    <div class="spotlight">
      <ul>
        <li><a class="spotlight-link" href="">link</a></li>
        <li><a class="spotlight-link" href="">link</a></li>
        <li><a class="spotlight-link" href="">link</a></li>
      </ul>
    </div>

(supondo que eu esteja usando herança sempre que possível, mas muitas vezes ainda precisam de controle específico sobre o último elemento na árvore)

O que me causa dúvida é: todo o excesso de HTML da impressão de nomes de classes em elementos em toda a página não nega os ganhos de desempenho obtidos ao evitar seletores filhos CSS aninhados? Estou acostumado a tentar escrever menos HTML e isso vai contra isso. Qualquer insight seria apreciado.

questionAnswers(2)

yourAnswerToTheQuestion