La respuesta es sí, las funciones de theme_mod serán más lentas, pero no significativamente, y los beneficios superan las diferencias.
Las modificaciones de tema se almacenan como opciones. Así que, en esencia, las funciones theme_mod son envolturas alrededor de las funciones de opciones.
Primero, comprenda que las configuraciones de theme_mod se almacenan como una matriz en una sola opción, con la clave del nombre del tema específico. Entonces, si hago esto:
set_theme_mod('aaa',123);
set_theme_mod('bbb',456);
Entonces, lo que realmente obtengo en la base de datos es una única fila de opciones con el nombre de theme_mods_themename que contiene una matriz serializada con ('aaa' = > 123, 'bbb' = > 456) en ella.
Ahora, get_theme_mod
será más lento porque en realidad está haciendo dos llamadas get_option
. En primer lugar, obtiene el nombre del tema. Luego, obtiene la opción theme_mods_themename
. Así que justo ahí es una pérdida de velocidad del 50%. El resto del trabajo realizado se basa principalmente en los filtros, ya que hay una llamada de filtro adicional, pero a menos que tenga algo en ese filtro, esto es un poco insignificante.
Tenga en cuenta que el sistema de opciones almacena los datos recuperados en el caché de objetos, por lo que no está realizando varias llamadas a la base de datos aquí. Solo el primer uso resulta en un hit de base de datos.
El set_theme_mod
será un poco más lento porque hace esas mismas dos llamadas de opciones de obtención, luego hace otra llamada get_option
para obtener el nombre del tema nuevamente, y luego hace update_option
con el conjunto completo de ahora cambiado. opciones Esto provoca una actualización de la base de datos, y el hecho de que esté enviando muchos más datos puede ser la causa de una desaceleración notable. Actualizar unos pocos bytes es más rápido que actualizar una fila más grande. Pero no tanto como te darías cuenta, por lo general. A menos que tengas un montón de configuraciones ...
Las funciones de modificación de tema probablemente se deban a la optimización en general, sin embargo, sin embargo, aún así debes usarlas en lugar de get_option y demás, porque son temas secundarios.
El problema con el uso de las filas de opciones directamente es que las está usando directamente y está usando nombres de clave específicos para su configuración.
Si tengo un tema llamado "AAA" y hago un tema secundario llamado "BBB" para usar en otro sitio, entonces mi tema "AAA" podría usar una opción llamada "ejemplo". Cuando actualizo un sitio y esta actualiza mi opción, la misma opción ahora se aplicará a mi tema secundario. ¿Y si no quisiera que lo hiciera? ¿Qué sucede si deseo que el tema secundario utilice un conjunto diferente de configuraciones de opciones?
Las modificaciones de tema, al incluir el nombre del tema real (y no un valor codificado) como parte de la clave, aseguran que cada "tema" en el sitio use su propio conjunto de configuraciones. Puedo cambiar de un lado a otro y la configuración no se transfiere entre ellos, permanecen como los establezco. Más simple, más obvio, más intuitivo.
Y si algún cambio central o complemento en el futuro modifica el funcionamiento de theme_mods, automáticamente obtendrá los beneficios de eso sin ningún cambio. Los envoltorios siempre van a ser más lentos, eso es inevitable, es la naturaleza de los envoltorios. Sin embargo, todavía estás escribiendo código PHP, no lenguaje de máquina. Usamos envoltorios como este para simplificar las cosas y la funcionalidad por separado. Los temas no deben saber, o preocuparse, cómo se almacenan sus opciones en la base de datos o cómo funciona la asignación de nombres. Las funciones theme_mod proporcionan una solución más simple y más limpia.