A resposta é que sim, as funções theme_mod serão mais lentas, mas não significativamente, e os benefícios superam as diferenças.
Mods de tema são armazenados como opções. Portanto, em essência, as funções theme_mod são wrappers das funções de opções.
Primeiro, entenda que as configurações de theme_mod são armazenadas como uma matriz em uma única opção, com o nome do tema específico. Então, se eu fizer isso:
set_theme_mod('aaa',123);
set_theme_mod('bbb',456);
Então, o que eu realmente recebo no banco de dados é uma única linha de opções com o nome theme_mods_themename que contém uma matriz serializada com ('aaa' => 123, 'bbb' => 456).
Agora, get_theme_mod
será mais lento porque na verdade está fazendo duas get_option
chamadas. Primeiro, ele recebe o nome do tema. Então, obtém a theme_mods_themename
opção. Então, aí está uma perda de velocidade de 50%. O restante do trabalho realizado está principalmente em filtros, pois há uma chamada extra, mas a menos que você tenha algo nesse filtro, isso é insignificante.
Observe que o sistema de opções armazena dados recuperados no cache do objeto, portanto, não faz várias chamadas ao banco de dados aqui. Somente o primeiro uso resulta em uma ocorrência no banco de dados.
O processo set_theme_mod
será um pouco mais lento porque ele faz as mesmas duas chamadas de opções de obtenção, depois faz outra get_option
chamada para obter o nome do tema novamente e o mesmo ocorre update_option
com o conjunto completo de opções agora alteradas. Isso causa uma atualização do banco de dados e o fato de estar enviando muito mais dados pode realmente ser a causa de uma desaceleração perceptível. Atualizar alguns bytes é mais rápido que atualizar uma linha maior. Mas não tanto quanto você notaria, normalmente. A menos que você tenha muitas configurações ...
As funções de modificação do tema provavelmente estão sujeitas à otimização geral, certamente, mas, no entanto, você ainda deve usá-las em vez de get_option e isso porque os temas filhos.
O problema com o uso de linhas de opções diretamente é que você as está usando diretamente e usando nomes de chave específicos para suas configurações.
Se eu tiver um tema chamado "AAA" e criar um tema filho chamado "BBB" para uso em outro site, meu tema "AAA" poderá usar uma opção chamada "exemplo". Quando eu atualizar um site e ele atualizar minha opção, a mesma opção será aplicada agora ao meu tema filho. E se eu não quisesse isso? E se eu quisesse que o tema filho usasse um conjunto diferente de configurações de opções?
Os mods de tema, incluindo o nome do tema real (e não um valor codificado) como parte da chave, garantem que cada "tema" no site use seu próprio conjunto de configurações. Eu posso alternar e as configurações não são transferidas entre elas, elas permanecem como eu as defini. Mais simples, mais óbvio, mais intuitivo.
E se alguma futura mudança ou plug-in principal modificar como o theme_mods funciona, você obterá automaticamente os benefícios sem alterações. Os invólucros sempre serão mais lentos, isso é inevitável, é a natureza dos invólucros. No entanto, você ainda está escrevendo código PHP, não linguagem de máquina. Usamos wrappers como esse para simplificar as coisas e separar a funcionalidade. Os temas não precisam saber, nem se importar, como suas opções são armazenadas no banco de dados ou como a nomeação funciona. As funções theme_mod fornecem uma solução mais simples e limpa.
/wp-includes
emoption.php
ondeget_option()
é definido e,theme.php
ondeget_theme_mod()
é definido, você pode ver que este último realmente chamaget_option()
em si, agindo como uma extensão dela que também se aplica todos os filtros necessários. Poderia explicar por que é mais lento.