¿Es get_option () más rápido que acceder a get_transient ()?

9

Hoy realizo una prueba en mi db para explorar la diferencia de velocidad entre acceder a una tecla desde opciones, tabla personalizada y amp; transitorios Ejecuté la prueba 1000 veces y el siguiente es el tiempo necesario para ejecutar 1000 operaciones de obtención:

  1. get_transient() 0.0245 segundos
  2. get_option() 0.0068 segundos
  3. 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: ¿ get_option() es más rápido que get_transient() o me equivoqué en algo en mi prueba? ¿La demora de la tabla personalizada se debe 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?

    
pregunta learning_13 12.02.2018 - 20:05

2 respuestas

14
  

Hoy realizo una prueba en mi db para explorar la diferencia de velocidad entre acceder a una tecla desde opciones, tabla personalizada y amp; transitorios Ejecuté la prueba 1000 veces y el siguiente es el tiempo necesario para ejecutar 1000 operaciones de obtención:

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. Así que no es una comparación justa

  

get_transient () 0.0245 segundos   get_option () 0.0068 segundos   operación de selección simple desde la tabla personalizada 0.65 segundos

Esta es también una comparación injusta, ya que las opciones con el conjunto de opciones de carga automática se cargarán de forma avanzada en una sola consulta desde el principio. Así que get_option está extrayendo de WP_Cache , la opción ya se ha recuperado.

  

También verifiqué que el transitorio no expiró durante esta prueba.

Esto no debería tener un impacto en un sistema normal en la recuperación de transitorios, después de todo, no sabe si ha caducado hasta que se haya recuperado

  

Entonces, la pregunta es: ¿get_option () es más rápido que get_transient () o me estropeé algo en mi prueba?

Depende.

  

¿El retraso de la tabla personalizada se debe a que WordPress almacena en caché las opciones predeterminadas?

Muy posible, pero la rapidez de la selección depende en gran medida de la consulta y el diseño de la tabla

  

Además, ¿las opciones también se almacenan en caché por diferentes complementos de almacenamiento en caché como los transitorios?

Sí, se usa WP_Cache , que lo almacenará en la memoria por el resto de la solicitud

Repetibilidad

Todos estos se almacenan en caché a través de WP_Cache , por lo que la segunda vez que lo solicites, no hay DB involucrado.

Variabilidad y depende

Todo esto asume una base común, pero ¿qué pasa con los cachés de objetos?

Permite introducir una instancia de MemcacheD o una instancia de Redis (le recomiendo que lo haga si tiene la opción, GRANDES 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 Barniz )

Ahora tenemos una nueva situación:

  • Ahora los datos se almacenan en la RAM, y una vez que se recuperan de la base de datos se preparan, y los tiempos de acceso se reducen drásticamente. Aún más lento que una variable, pero significativamente más rápido que una consulta de base de datos
  • Una gran cantidad de datos nuevos se almacenan en WP_Cache que normalmente no lo está. P.ej. WP_Post objetos, meta de publicación, etc.
  • WP_Cache ahora persiste en todas las solicitudes
  • MemcacheD, etc. puede eliminar los transitorios caducados, etc.

Así que ahora 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 que vale la pena preguntarse, la respuesta es que la diferencia es insignificante y dentro de los márgenes de error

Así que deja de micro-optimización, son el mismo medio de almacenamiento, y esto no es digno de tu tiempo

  • Use las opciones si necesita almacenar algo que abarque todo el sitio
  • Use transitorios para almacenar temporalmente cosas que son costosas de calcular para que no tenga que ir a la próxima vez

No vale la pena dedicar tiempo a elegir uno sobre el otro en función del rendimiento, no hay una diferencia significativa.

Hay cosas mucho mejores que hacer para optimizar que dan ahorros significativamente mayores, por ejemplo. usar taxonomías en lugar de metadatos en las consultas de publicaciones, no usar los parámetros de estilo __not , hacer menos cosas en la página, instalar una 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 WP Caching, lo que lo obligará a escribir su propia cuenta

    
respondido por el Tom J Nowell 12.02.2018 - 20:58
4

Si no se encuentra el almacenamiento en caché de objetos, get_transient llama a get_option dos veces, una vez o el intervalo de vencimiento y uno para el valor, por lo que no será más rápido.

El rendimiento de

get_option por sí mismo se verá afectado si la opción se "carga automáticamente" (predeterminada) o no. Todas las opciones cargadas automáticamente se recuperan en una solicitud de la base de datos y se almacenan en la memoria caché, por lo que debería tener un impacto muy pequeño en la cantidad de veces que llama a get_option , incluso si es para diferentes opciones.

Cuando accede directamente a la base de datos, omite todo el almacenamiento en caché y otras mejoras de rendimiento, y se espera que sea más lento a menos que implemente alguna lógica inteligente por su cuenta.

Dicho todo esto, no estoy seguro de que su prueba haya sido buena, pero a pesar de eso, 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 brindará acceso a los datos. mucho más cerca de cero ... y, por supuesto, si decide utilizar sus propias tablas de base de datos, debe integrar sus API de acceso con el mecanismo de almacenamiento en caché de objetos.

    
respondido por el Mark Kaplun 12.02.2018 - 20:42

Lea otras preguntas en las etiquetas