Aujourd'hui, je lance un test sur ma base de données pour explorer la différence de vitesse entre l'accès à une clé à partir d'options, d'une table personnalisée et de transitoires. J'ai exécuté le test 1000 fois et voici le temps nécessaire pour exécuter 1000 opérations get:
get_transient()
0,0245 secondesget_option()
0,0068 secondes- opération de sélection simple à partir du tableau personnalisé 0,65 seconde
J'ai également vérifié que le transitoire n'était pas expiré pendant ce test. La question est donc: est-ce get_option()
plus rapide get_transient()
ou ai-je gâché quelque chose dans mon test? Le délai de table personnalisé est-il dû aux options mises en cache par défaut par WordPress? De plus, les options sont-elles également mises en cache par différents plugins de mise en cache comme les transitoires?
plugin-development
cache
transient
options
learning_13
la source
la source
Réponses:
Gardez à l'esprit que la table d'options est utilisée à la fois pour les options et les transitoires sur la plupart des systèmes, et cette table a été optimisée, avec des index ajoutés. Ce n'est donc pas une comparaison juste
C'est également une comparaison injuste, les options avec le
autoload
jeu d'options seront chargées en avance dans une seule requête dès le début. Il enget_option
va de même pourWP_Cache
l'option, l'option a déjà été récupérée.TLDR: Il ne récupère pas réellement l'option, il a déjà été récupéré, il est juste en train de le retirer de la mémoire en raison de l'
autoload
optionCela ne devrait pas avoir d'impact sur un système normal sur la récupération transitoire, après tout, il ne sait pas s'il a expiré jusqu'à ce qu'il soit récupéré.
Ça dépend:
get_option
appelautoload
définie sur true sont toutes chargées en un seul appel au début, elles sont donc conservées en mémoire, aucune requête ne se produit après cela.Très possible, mais la rapidité de cette sélection dépend beaucoup de la conception de la requête et de la table
Oui,
WP_Cache
est utilisé, qui le stockera en mémoire pour le reste de la demande. La mise en cache des plugins peut conserver ces valeurs pour des raisons de performances.Répétabilité
Ceux-ci sont tous mis en cache via
WP_Cache
donc la deuxième fois que vous le demandez, aucune base de données n'est impliquée.Variabilité et cela dépend
Tout cela suppose une base commune, mais qu'en est-il des caches d'objets?
Permet d'introduire une instance MemcacheD ou une instance Redis (je vous recommande fortement de le faire si vous avez l'option, d'énormes avantages en termes de performances pour les sites bien construits, surtout si vous les utilisez pour la mise en cache des pages, sauf si vous avez quelque chose comme la configuration de Varnish)
Maintenant, nous avons une nouvelle situation:
WP_Cache
ce qui n'est normalement pas le cas. Par exemple,WP_Post
objets, post méta, etc.WP_Cache
persiste désormais à travers les demandesAlors maintenant, les transitoires et les options ont le même coût d'accès. Ils étaient déjà proches, mais ils sont désormais négligeables et ont davantage à voir avec la charge du processeur au moment de la demande.
Donc, pour des performances dois-je utiliser des transitoires ou des options?
Bien qu'il soit utile de se poser la question, la réponse est que la différence est négligeable et dans les marges d'erreur
Alors arrêtez la micro-optimisation, c'est le même support de stockage, et ce n'est pas digne de votre temps
Cela ne vaut pas la peine de choisir l'un plutôt que l'autre en fonction des performances, il n'y a pas de différence significative.
Il y a de bien meilleures choses à faire pour optimiser ce qui permet de réaliser des économies significativement plus importantes, par exemple en utilisant des taxonomies au lieu de méta dans les requêtes de publication, en n'utilisant pas les
__not
paramètres de style, en faisant moins de choses sur la page, en installant un cache d'objets, en réduisant les publications par page, en évitant les requêtes distantes etcQu'en est-il d'une table personnalisée qui ...
Non, le tableau d'options est déjà bien optimisé, l'utilisation d'un tableau personnalisé déplacera simplement les opérations en dehors du système WP Caching, vous forçant à écrire le vôtre
la source
Si aucun cache d'objet n'est trouvé,
get_transient
appelleget_option
deux fois, une fois ou l'intervalle d'expiration et un pour la valeur, cela ne va pas être plus rapide.get_option
les performances en elles-mêmes seront affectées selon que l'option est "chargée automatiquement" (par défaut) ou non. Toutes les options chargées automatiquement sont récupérées dans une seule demande pour la base de données et stockées dans le cache mémoire, et à cet effet, il devrait y avoir très peu d'impact sur le nombre de fois que vous appelez,get_option
même s'il s'agit de différentes options.Lorsque vous accédez directement à la base de données, vous contournez toutes les améliorations de mise en cache et de performances, et cela devrait être plus lent, sauf si vous implémentez vous-même une logique intelligente.
Cela dit, je ne suis pas sûr que votre test ait été bon, mais malgré tout, toute la discussion est inutile, comme si vous vous souciez vraiment des performances, vous utiliserez le système de cache d'objets (et le plugin correspondant), ce qui rapprochera le temps d'accès aux données. à zéro .... et bien sûr, si vous décidez d'utiliser vos propres tables de base de données, vous devez intégrer vos API d'accès au mécanisme de mise en cache des objets.
la source