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:
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
get_transient () 0.0245 segundos get_option () 0.0068 segundos operación de selección simple de la Tabla personalizada 0.65 segundos
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í que get_option
está tirando de WP_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ón
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 transitoria, después de todo, no sabe si ha expirado hasta que se haya recuperado.
Entonces, la pregunta es: ¿get_option () es más rápido que get_transient () o he estropeado algo en mi prueba?
Depende:
- En la mayoría de los sistemas, los transitorios se almacenan usando opciones, ambos implican una
get_option
llamada
- Las opciones con
autoload
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 esto
- El almacenamiento en caché de objetos almacena en caché las opciones cargadas automáticamente y los transitorios
¿Es el retraso de la tabla personalizada debido a que WordPress almacena en caché las opciones predeterminadas?
Muy posible, pero la rapidez con la que toma esa selección depende mucho 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í, 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:
- Ahora los datos se almacenan en la RAM, y una vez que se obtienen de la base de datos, se ceban y los tiempos de acceso se reducen drásticamente. Todavía más lento que una variable, pero significativamente más rápido que una consulta de base de datos
- Se almacenan muchos datos nuevos
WP_Cache
que normalmente no lo están. Por ejemplo WP_Post
, objetos, post meta, etc.
WP_Cache
ahora persiste en todas las solicitudes
- MemcacheD, etc. puede eliminar los transitorios caducados, etc.
Entonces, 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.
- Use las opciones si necesita almacenar algo para todo el sitio
- Use transitorios para almacenar temporalmente cosas que son caras de calcular para que no tenga que hacerlo la próxima vez
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