Autoload: medir as opções carregadas sempre e alterá-las
O que é aqui realmente medido
A cada chamada individual — página inicial, imagem, pedido REST — o WordPress lê numa única consulta todas as opções com a coluna autoload definida. Estas linhas não custam, portanto, tempo uma vez, mas sempre. Que valores da coluna contam como «é carregado» pergunta o Kakapo ao próprio WordPress (wp_autoload_values_to_autoload, desde a 6.6, incluindo o respetivo filtro); em instalações mais antigas vale a lista yes, on, auto-on, auto. A seguir é contado o comprimento de cada valor em PHP, ou seja, bytes reais. LENGTH() em SQL seria mais rápido, mas, consoante o controlador, conta caracteres em vez de bytes — sob SQLite apareceriam na interface números errados com caracteres acentuados e emojis. A leitura é feita em passos de 100 linhas e, no máximo, 20.000 linhas por execução; se esse limite for atingido, a interface di-lo e assinala expressamente os números como limite inferior. A medição só corre ao abrir a área ou em «Medir de novo» — nunca na montagem da página de um visitante — e vale depois durante 300 segundos.
Ler corretamente os quatro indicadores
Em cima estão quatro números. «Carregado em cada chamada» indica o tamanho total, o número de opções e a duração da medição. «Proporção do limiar de aviso» compara isso com 800.000 bytes — exatamente o mesmo limiar que a verificação «Estado do site» do núcleo do WordPress, incluindo o respetivo filtro; dois limites de aviso diferentes numa instalação só seriam confusos. «Desse total, mudável» é a parte sem dono ativo, ou seja, aquilo em que podes realmente mexer. «Já mudado» soma o que já retiraste aqui do processo de carregamento. Por baixo, o cartão «De onde vem a carga» mostra a mesma quantidade repartida por origem, e o segundo cartão os 25 maiores itens individuais.
A atribuição é uma comparação de nomes, não uma prova
A tabela options não tem uma coluna “Proprietário”. Por isso, o Kakapo compara o nome da opção com aquilo que está realmente no disco: nome do diretório, nome do ficheiro do script principal e domínio de texto de cada plugin instalado, bem como os slugs de todos os temas. Ganha o prefixo correspondente mais longo; caso contrário, “kakapowp” ganharia a “kakapowp_performance” e seria indicado o plugin errado. O que um plugin usa realmente para as suas opções não consta de nenhum cabeçalho — uma abreviatura como “wpseo” não é dedutível de “Yoast SEO”. Esses casos vão parar ao balde “sem atribuição”, e isso significa “não sei”, não “não pertence a ninguém”. Se conhecer um prefixo com segurança, acrescente-o através do filtro kwpp_autoload_praefixe; o plugin faz exatamente o mesmo para o seu próprio prefixo.
O que pode ser mudado — e porque muita coisa continua bloqueada
O botão «Mudar» só aparece quando duas condições estão cumpridas ao mesmo tempo: a opção tem pelo menos 1 KB e não pertence a nenhum componente ativo. Ficam assim bloqueadas as opções do núcleo do WordPress (lista fixa de populate_options mais os padrões theme_mods_*, widget_* e *_user_roles — essas são realmente necessárias a cada chamada), as memórias intermédias (os transients pertencem à limpeza profunda, onde desaparecem por completo em vez de serem apenas carregados mais tarde), tudo o que pertence a um plugin ativo ou ao tema ativo, e tudo abaixo de 1 KB, porque aí a consulta individual adicional custa mais do que os bytes poupados. Passa o rato por cima de um botão acinzentado: o motivo está ali como indicação. O caso que compensa é quase sempre a extensão inativa ou desinstalada há muito, cujas linhas simplesmente ficaram para trás. Sem uma licença válida, a área fica em repouso — continua a medir e a mostrar, mas não muda nada.
Mudar, registo, reverter
A escrita é feita através de wp_set_option_autoload() do núcleo, não com um UPDATE próprio: só assim são esvaziadas depois as memórias intermédias corretas, caso contrário um Cache de objetos externo continuaria a entregar o estado antigo. Em instalações sem essa função, o Kakapo define «no» e esvazia alloptions, notoptions e a própria entrada individual. Antes da escrita, a linha é verificada mais uma vez de fresco: ainda existe, continua sequer em «carregado», e que tamanho tem neste momento — no registo deve ficar o que foi realmente retirado do processo de carregamento. Se a base de dados não executar a alteração, a mensagem di-lo expressamente e nada foi alterado. O registo guarda até 200 entradas com o valor antigo da coluna, o tamanho, o momento e o nome de utilizador. Reverter é possível individualmente ou para todas de uma vez; é reescrito «carregado», porque o valor intermédio «auto» do WordPress não é recuperável através da função do núcleo — o valor original continua visível no registo. Se, entretanto, uma opção tiver desaparecido por completo, por exemplo porque o plugin foi desinstalado, o Kakapo comunica-o e remove a entrada sem objeto, em vez de afirmar «revertido».