Hoy ejecuté una prueba sobre mi base de datos para explorar la diferencia de velocidad entre acceder a una clave desde opciones, tabla personalizada y transitorios. Ejecuté la prueba 1000 veces y el siguiente es el tiempo necesario para ejecutar 1000 operaciones de obtención:
get_transient()
0.0245 segundosget_option()
0.0068 segundos- operación de selección simple de la tabla personalizada 0.65 segundos
También verifiqué que el transitorio no expiró durante esta prueba. Entonces, la pregunta es, ¿es get_option()
más rápido get_transient()
o estropeé algo en mi prueba? ¿Es el retraso de la tabla personalizada debido a que WordPress almacena en caché las opciones predeterminadas? Además, ¿las opciones también se almacenan en caché por diferentes complementos de almacenamiento en caché como los transitorios?
plugin-development
cache
transient
options
aprendizaje_13
fuente
fuente
Respuestas:
Tenga en cuenta que la tabla de opciones se usa tanto para las opciones como para los transitorios en la mayoría de los sistemas, y esa tabla se ha optimizado, con índices agregados. Entonces no es una comparación justa
Esta también es una comparación injusta, las opciones con el
autoload
conjunto de opciones se cargarán de forma avanzada en una sola consulta desde el principio. Así queget_option
está tirando deWP_Cache
, la opción ya se ha recuperado.TLDR: en realidad no está recuperando la opción, ya fue recuperada, solo la extrae de la memoria debido a la
autoload
opciónEsto no debería tener un impacto en un sistema normal en la recuperación transitoria, después de todo, no sabe si ha expirado hasta que se haya recuperado.
Depende:
get_option
llamadaautoload
set to true se cargan en una sola llamada al inicio, por lo que se mantienen en la memoria, no se realizan consultas después de estoMuy posible, pero la rapidez con la que toma esa selección depende mucho de la consulta y el diseño de la tabla.
Sí,
WP_Cache
se utiliza, lo que lo almacenará en la memoria para el resto de la solicitud. Los complementos de almacenamiento en caché pueden persistir estos valores por razones de rendimiento.Repetibilidad
Todos estos se almacenan en caché, por
WP_Cache
lo que la segunda vez que lo solicite, no estará involucrado ningún DB.La variabilidad y depende
Todo esto supone una base común, pero ¿qué pasa con los cachés de objetos?
Vamos a introducir una instancia de MemcacheD o una instancia de Redis (Recomiendo encarecidamente que lo haga si tiene la opción, ENORMES beneficios de rendimiento para sitios bien construidos, especialmente si los usa para el almacenamiento en caché de páginas, a menos que tenga algo como la configuración de Varnish)
Ahora tenemos una nueva situación:
WP_Cache
que normalmente no lo están. Por ejemploWP_Post
, objetos, post meta, etc.WP_Cache
ahora persiste en todas las solicitudesEntonces, los transitorios y las opciones tienen el mismo costo de acceso. Ya estaban cerca, pero ahora son insignificantes y tienen más que ver con la carga de la CPU en el momento en que se realizó la solicitud.
Entonces, para el rendimiento, ¿debo usar transitorios u opciones?
Si bien es una pregunta digna de preguntarse, la respuesta es que la diferencia es insignificante y está dentro de los márgenes de error.
Por lo tanto, detenga la micro-optimización, son el mismo medio de almacenamiento, y esto no es digno de su tiempo.
No vale la pena elegir uno sobre el otro en función del rendimiento, no hay una diferencia significativa.
Hay cosas mucho mejores que hacer para optimizar que brindan ahorros significativamente mayores, por ejemplo, usar taxonomías en lugar de meta en consultas de publicaciones, no usar
__not
parámetros de estilo, hacer menos cosas en la página, instalar un caché de objetos, publicaciones más bajas por página, evitar solicitudes remotas etc.¿Qué pasa con una tabla personalizada que ...
No, la tabla de opciones ya está bien optimizada, el uso de una tabla personalizada simplemente moverá las operaciones fuera del sistema de almacenamiento en caché de WP, lo que le obligará a escribir su propio
fuente
Si no se encuentra el almacenamiento en caché de objetos,
get_transient
llamaget_option
dos veces, una o el intervalo de vencimiento y uno para el valor, por lo tanto, no será más rápido.get_option
el rendimiento por sí solo se verá afectado por si la opción está "cargada automáticamente" (predeterminada) o no. Todas las opciones cargadas automáticamente se recuperan en una solicitud para la base de datos y se almacenan en la memoria caché, y por lo tanto, debería haber muy poco impacto en cuántas veces se llama,get_option
incluso si se trata de diferentes opciones.Cuando accede a la base de datos directamente, omite todas las mejoras de rendimiento de almacenamiento en caché y otras, y se espera que sea más lento a menos que implemente alguna lógica inteligente usted mismo.
Dicho todo esto, no estoy seguro de que su prueba haya sido buena, pero de todos modos, toda la discusión no tiene sentido, ya que si realmente le importa el rendimiento, usará el sistema de caché de objetos (y el complemento correspondiente) que acercará mucho más el tiempo de acceso a los datos a cero ... y, por supuesto, si decide usar sus propias tablas de base de datos, debe integrar sus API de acceso con el mecanismo de almacenamiento en caché de objetos.
fuente