Advanced Custom Fields con supervelocidad

¿Tu sitio web WordPress usa muchos ACF y te va lento el back-end? ¿Quieres que funcione más rápido, y ahorrar consultas en tu base de datos? Presta atención, pues te cuento algunas claves a tener en cuenta porque tu sitio puede correr como si no tuvieras ni siquiera instalado ACF.

Los custom fields engordan y entorpecen la base de datos de WordPress. No sólo la tabla de _postmeta, tambien la tabla _options.

No ocurre sólo con ACF, esto es normal, cualquier plugin que añada campos personalizados a nuestras entradas (Woocommerce, etc), hará que la BD sea más densa y por lo tanto las consultas internas a ésta serán más y más lentas.

Esto puede hacer que el backend vaya lento, y sea tedioso editar y guardar las entradas, o simplemente movernos dentro de nuestro administrador. Sobretodo si estás usando un hosting compartido económico, en donde los recursos de memoria y límites de nuestra configuración de php serán más limitados.

La solución no siempre debe pasar por adquirir un hosting más potente, puede que nuestro site sea mediano y no nos compense el coste. Pues a optimizar toca, que se puede.

Optimizar el backend y la base de datos generando ficheros en tu tema.

Puede verse complejo, pero no lo es tanto. De hecho, la base de datos, quizá no haga falta tocarla. Sólo hay que separar cierta información que no necesariamente tiene que estar dentro de ésta.

Venta objetos ocasion coleccionismo y vintage online

Pasar a nuestro theme (archivos) todo lo que NO debe estar en nuestra base de datos.

Todo lo que pueda estar en archivos, ponlo en archivos. El acceso a estos es directo y se cachean con mayor facilidad. De lo que sea, no sólo ACF, cualquier estilo, script, función, si puede estar en tu functions.php, o en archivos incluidos, será accedida con mayor velocidad que si está en tu base de datos.

Los plugins nos facilitan la vida, pero hay que saber cuando se deben volcar al theme ciertas cosas. Unos ejemplos de información que podemos tener en nuestra base de datos y que puede ser externalizada a archivos es:

  • Estilos en el css personalizado del backend, o de algunos campos de plugin
  • Definiciones de Custom Post Types o taxonomías creadas con algún generador visual, del tipo CPT UI o similares.
  • Definiciones de grupos de campos personalizados
  • Definiciones e info en cajitas de campos de builders, visual composers y editores visuales, de tipo elementor, divi y similares (esto es NEFASTO).

El css es tan sencillo como quitarlo del backend e incluirlo al css del theme, ya sea en el style.css de nuestro tema hijo, o incorporándolo a los estilos cargados desde nuestro theme usando la función enqueue. Incluso meter a saco un <link rel=»stylesheet»… en el <head> es mejor que tenerlo en el admin. Si luego minificas o juntas pues mejor. Todo que sea cacheabe siempre.

Los custom post types y/o taxonomías personalizados, también debes pasarlos al php de tu plantilla. No está mal usar un generador que te permita diseñar y administrar tus CPT, pero una vez ya los tengas, usa la herramienta que te ofrecen estos plugins para generar el código PHP que registra estos tipos de contenido y pásalo al theme. Siendo leidos del theme ahorraremos consultas a la bbdd cada vez que se cargue el backend.

Nos vamos a centrar ahora en el tercer punto, del cuarto sólo puedo decirte que no uses jamás elementor ni similares. Pásate al editor de bloques de WordPress, Gutenberg, porque este se creó para mejorar y barrer el caos y destrozo que generan estos editores visuales en los sites de WordPress.

Acelerar los ACF generando archivos PHP o JSON.

Nuestros grupos y campos, creados usando ACF se pueden pasar a archivos PHP o JSON. El método más rápido y eficiente, es generar el código PHP que registra nuestros campos e incorporarlo en nuestro theme. Pero una vez están en este formato, son más «inmanejables», a la hora de hacer cambios o ser reutilizados en diferentes proyectos. Por esto, existe el método JSON, que es más versátil.

Campos de ACF en archivos JSON

La generación de archivos JSON de nuestras definiciones de grupos de custom fields, está automatizada si creamos un directorio «/acf-json» en la raiz de nuestra plantilla o theme.

Si no hay ningún problema de usuarios/permisos en el sistema de archivos, cada vez que guardamos los cambios en un grupo de campos, se debería generar el archivo group_xxxxxxx.json en esta carpeta. Si no nos funciona, te voy a explicar los pasos para hacerlo de forma manual. Es MUY sencillo:

  1. Usando la herramienta de exportación, exporta tu grupo a fichero JSON. No exportes más de un grupo a la vez, debes hacerlo de uno en uno. Edita el fichero.
  2. Primero, copia el nombre del grupo del inicio del json, y guarda el fichero usando ese nombre punto json. O bién renombra de acf_export…json a group_xxxx.json.
  3. Ahora sólo tienes que borrar del array json exportado los símbolos [ y ] del comienzo y del final.
  4. Por último, tras el último dato del array json, «show_in_rest»: (0 o 1), añadiremos otra línea con el dato ‘modified’:TIMESTAMP en donde timestamp pondremos un timestamp de la hora actual. Usa google y busca «actual timestamp», obtendrás la fecha y hora actual en formato timestamp. Copia el número y pégalo en el valor de modified.
  5. Sube el archivo group_loquesea.json usando git o ftp a la carpetita acf-json de tu theme. Y ya está, tu wp dara prioridad a tu json.
  6. Si tienes muchos grupos de campos, y los pasas todos a ficheros, sea usando json o php, acelerarás tu site un 1000%, garantizado.

ACF todavía más rápidos que te cagas: ACF Custom Database Tables

La panacea es ya algo superpro que te voy a contar ahora. La info de los custom fields (no sus definiciones, sino sus valores) sigue engordando nuestros termmeta o postmeta. Leer de cada post estos campos meta, también es tedioso para el rendimiento de nuestra bbdd.

Si ya has optimizado alguna vez una base de datos, sabes que por ejemplo, tras cada actualización de woocommerce, tu admin te avisa de que se está haciendo un trabajo en ésta en segundo plano. Es una operación de limpieza y también de generación de índices. Podemos generar índices y optimizaciones de nuestras tablas usando phpMyAdmin, o bien con plugins como WP Optimize, herramientas muy recomendables. Pero te voy a decir 2 plugins más que van a hacer que tu site se tome 5 red bulls:

Tablas exclusivas para tus custom fields con ACF Custom Database Tables LIKE A BOSS

Este plugin nos generará de los acf que le digamos, tablas aparte. Los datos de cada post, se guardarán en la nueva tabla pero también se seguirán guardando en postmeta. Pero, el valor de cada campo se mirará primero en la tabla custom. Por lo que la velocidad aumentará, porque esa tabla será infinitamente más pequeña que la tabla postmeta.

Como nota, lo he probado y funciona de maravilla. Pero sólo me ha funcionado con grupos ACF de post, páginas o cpt. Para grupos asignados a un term me petó.

Bonus track (esto último para toda tu base de datos, no sólo porque uses ACF): Añade índices de alto rendimiento a las tablas de tu base de datos con este plugin:

Si sigues los pasos de esta mini-guia, tu WordPress volará y tu backend irá como la seda. Y tú, ¿tienes también algún consejo bueno para optimizar acf para que el admin no vaya lento? ¡Pues compártelo en los comentarios! ¡Que para eso están!

Apéndice: Comparativa de rendimiento de custom fields en BBDD, en json y en php

Hilo de twitter de recomendada lectura:


Publicado

en

, ,

por

Imagen decorativa titulo comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *