La réponse est que oui, les fonctions theme_mod seront plus lentes, mais pas de manière significative, et les avantages l'emportent sur les différences.
Les mods de thème sont stockés en tant qu'options. Donc, en substance, les fonctions theme_mod sont des wrappers autour des fonctions options.
Tout d'abord, sachez que les paramètres theme_mod sont stockés sous forme de tableau dans une seule option, codée avec le nom du thème spécifique. Donc, si je fais ça:
set_theme_mod('aaa',123);
set_theme_mod('bbb',456);
Ensuite, ce que j'obtiens réellement dans la base de données est une seule ligne d'options avec le nom de theme_mods_themename qui contient un tableau sérialisé avec ('aaa' => 123, 'bbb' => 456).
Maintenant, ce get_theme_mod
sera plus lent, car il passe en fait deux get_option
appels. Tout d'abord, il obtient le nom du thème. Ensuite, il obtient l' theme_mods_themename
option. Alors là, c'est une perte de vitesse de 50%. Le reste du travail effectué repose principalement sur des filtres, en ce sens qu'il y a un appel de filtre supplémentaire, mais à moins que vous n'ayez quelque chose sur ce filtre, c'est un peu insignifiant.
Notez que le système d'options stocke les données récupérées dans le cache d'objets, donc il ne fait pas plusieurs appels de base de données ici. Seule la première utilisation entraîne un hit de base de données.
Le set_theme_mod
sera un peu plus lent car il fait ces deux mêmes appels d'options get, puis il fait un autre get_option
appel pour obtenir à nouveau le nom du thème, puis il le fait update_option
avec l'ensemble complet des options maintenant modifiées. Cela provoque une mise à jour de la base de données, et le fait qu'il envoie beaucoup plus de données peut en effet être la cause d'un ralentissement notable. La mise à jour de quelques octets est plus rapide que la mise à jour d'une ligne plus grande. Mais pas autant que vous le remarqueriez habituellement. À moins que vous ayez beaucoup de paramètres ...
Les fonctions de mod de thème sont probablement dues à une optimisation globale, certes, mais néanmoins vous devez toujours les utiliser au lieu de get_option et ainsi parce que les thèmes enfants.
Le problème avec l'utilisation directe des lignes d'options est que vous les utilisez directement et que vous utilisez des noms de clés spécifiques pour vos paramètres.
Si j'ai un thème appelé "AAA" et que j'en fais un thème enfant appelé "BBB" pour une utilisation sur un autre site, alors mon thème "AAA" pourrait utiliser une option nommée "exemple". Lorsque je mets à jour un site et qu'il met à jour mon option, la même option s'appliquera désormais à mon thème enfant. Et si je ne le voulais pas? Et si je voulais que le thème enfant utilise un autre ensemble de paramètres d'options?
Les mods de thème, en incluant le nom du thème réel (et non une valeur codée en dur) dans la clé, garantissent que chaque "thème" du site utilise son propre ensemble de paramètres. Je peux basculer d'avant en arrière et les paramètres ne sont pas transférés entre eux, ils restent comme je les ai définis. Plus simple, plus évident, plus intuitif.
Et si un futur changement de noyau ou plugin modifie le fonctionnement de theme_mods, alors vous en tirerez automatiquement les bénéfices sans aucun changement. Les emballages vont toujours être plus lents, c'est inévitable, c'est la nature des emballages. Néanmoins, vous écrivez toujours du code PHP, pas du langage machine. Nous utilisons des wrappers comme celui-ci pour simplifier les choses et séparer les fonctionnalités. Les thèmes ne devraient pas avoir besoin de savoir ou de se soucier de la façon dont leurs options sont stockées dans la base de données ou du fonctionnement de la dénomination. Les fonctions theme_mod fournissent une solution plus simple et plus propre.
/wp-includes
àoption.php
oùget_option()
est défini, ettheme.php
oùget_theme_mod()
est défini, vous pouvez voir que ce dernier fait appelleget_option()
lui - même, agissant comme une extension de celui - ci qui applique également les filtres nécessaires. Pourrait expliquer pourquoi c'est plus lent.