Cache de Objetos + Agrupación de Consultas — Rendimiento Empresarial | Field Forge - Campos personalizados, diseñados para la velocidad
Descargar Iniciar sesión

Cache de Objetos + Agrupación de Consultas — Rendimiento Empresarial

Fundamentos del cache de objetos en WordPress

Las funciones wp_cache_* de WordPress proporcionan una capa de caché que se sitúa entre tu código y la base de datos. Por defecto, WordPress utiliza un caché en memoria por solicitud (limpiado al final de cada solicitud). Con un backend de caché de objetos persistente como Redis o Memcached, la caché sobrevive entre solicitudes — las vistas de página posteriores acceden a la caché en lugar de a la base de datos.

En un sitio de alto tráfico con Redis:

  • Primera vista de página: obtiene de la base de datos, almacena en Redis
  • Segunda vista de página (mismos datos): accede a Redis, omite completamente la base de datos
  • Tercera vista de página: accede a Redis

Para cargas de trabajo con muchas lecturas, esto representa una mejora de rendimiento de 10 a 100 veces.

Field Forge y el cache de objetos

Cada valor de campo leído en Field Forge pasa por el cache de objetos:

“`php // Dentro de la implementación de get_field() de Field Forge (simplificado) $cached = wp_cache_get($cache_key, ‘fieldforge’); if ($cached !== false) { return $cached; }

$value = $this->fetch_from_database($post_id, $field_name); wp_cache_set($cache_key, $value, ‘fieldforge’, 3600); return $value; “`

  • Formato de clave de cachéfieldforge:{post_id}:{field_name}
  • Grupo de cachéfieldforge (separado de otros plugins)
  • Expiración — 1 hora por defecto, configurable a través de un filtro
  • Manejo de fallos de caché — pasa a la consulta de base de datos, luego almacena el resultado

Invalidación de caché

Cuando un valor de campo se actualiza o se elimina, Field Forge invalida automáticamente las entradas de caché relevantes:

php // Dentro de update_field() (simplificado) $this->save_to_database($post_id, $field_name, $value); wp_cache_delete("fieldforge:{$post_id}:{$field_name}", 'fieldforge');

La invalidación es:

  • Inmediata — al guardar, la antigua entrada de caché se elimina
  • Precisa — solo se invalida la caché del campo específico, no la del post completo
  • Conectada — los plugins pueden añadir lógica de invalidación personalizada a través del hook fieldforge/cache/invalidate

Backends de caché soportados

Field Forge funciona con cualquier backend de caché de objetos de WordPress:

Redis

El más común para hosting gestionado de WordPress. Plugins gratuitos: “Redis Object Cache” o “W3 Total Cache” con Redis habilitado. Proporciona caché persistente entre solicitudes.

Memcached

Más antiguo pero aún soportado. Plugins: “Memcached” o “W3 Total Cache.”

APCu

Caché de un solo servidor que es más rápido que Redis/Memcached para sitios de bajo tráfico (sin salto de red). Plugins: “APCu Object Cache.”

Caché en memoria por defecto

Si no hay un backend de caché de objetos persistente instalado, Field Forge recurre al caché en memoria por defecto de WordPress. La caché aún ocurre dentro de una sola vista de página, pero no entre solicitudes. Funciona en todas partes, sin configuración.

Carga por lotes

Para páginas de archivo y vistas de lista donde estás renderizando muchos posts a la vez, Field Forge proporciona una API batch_load() que obtiene campos personalizados para múltiples posts en una sola consulta SQL:

“`php $post_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; FieldForge::batch_load($post_ids);

// Todas las llamadas posteriores a get_field() en estos IDs de post acceden a la caché foreach ($post_ids as $id) { $hero_title = get_field(‘hero_title’, $id); // Acertar en caché $hero_image = get_field(‘hero_image’, $id); // Acertar en caché } “`

Sin batch_load(), lo anterior generaría 20 consultas SQL separadas (10 posts × 2 campos cada uno). Con la carga por lotes, es 1 consulta.

Pre-carga automática

Field Forge se conecta al filtro the_posts de WordPress para ejecutar la carga por lotes automáticamente en cualquier consulta que devuelva múltiples posts:

php // Hook interno de Field Forge add_filter('the_posts', function($posts) { if (!empty($posts)) { $post_ids = wp_list_pluck($posts, 'ID'); FieldForge::batch_load($post_ids); } return $posts; });

Páginas de archivo, resultados de búsqueda, listados de categorías y puntos finales de lista de la API REST se benefician automáticamente. No se necesitan cambios de código en tu tema.

Carga por lotes explícita para consultas personalizadas

Para llamadas a WP_Query en plantillas personalizadas, puedes cargar explícitamente por lotes después de la consulta:

“`php $query = new WP_Query([ ‘post_type’ => ‘product’, ‘posts_per_page’ => 30, ‘category_name’ => ‘featured’, ]);

// Carga por lotes de campos personalizados para los 30 productos en una consulta if ($query->have_posts()) { $post_ids = wp_list_pluck($query->posts, ‘ID’); FieldForge::batch_load($post_ids); }

// Ahora renderizar el bucle es solo aciertos en caché mientras ($query->have_posts()) : $query->the_post(); $price = get_field(‘price’); // Acertar en caché $sku = get_field(‘sku’); // Acertar en caché $features = get_field(‘features’); // Acertar en caché endwhile; “`

Comparación de rendimiento

En un sitio de prueba con 10,000 posts, 15 campos personalizados por post:

Sin caché de objetos

Acción Tiempo
Vista de página de un solo post 45ms consultas de campos personalizados
Archivo (20 posts) 840ms consultas de campos personalizados (N+1)
Categoría de WooCommerce (30 productos) 1,260ms

Con caché de objetos Redis (caché caliente)

Acción Tiempo
Vista de página de un solo post 3ms (aciertos en caché)
Archivo (20 posts) 12ms (aciertos en caché)
Categoría de WooCommerce (30 productos) 18ms

Con caché de objetos Redis + batch_load en caché fría

Acción Tiempo
Vista de página de un solo post 12ms (1 consulta + población de caché)
Archivo (20 posts) 95ms (1 consulta por lotes + población de caché)
Categoría de WooCommerce (30 productos) 142ms (1 consulta por lotes + población de caché)

La combinación de caché de objetos y carga por lotes es dramática en sitios de alto tráfico.

Monitoreo del rendimiento de la caché

Field Forge proporciona comandos de WP-CLI para monitorear el rendimiento de la caché:

“`bash

Mostrar estadísticas de caché

wp fieldforge cache stats

Salida:

Aciertos en caché: 94.3%

Fallos en caché: 5.7%

Tiempo promedio de acierto: 0.2ms

Tiempo promedio de fallo: 8ms

“`

Para sitios donde la tasa de aciertos de caché es baja (por debajo del 80%), investiga:

  • ¿Está funcionando realmente el backend de caché persistente?
  • ¿Es la invalidación de caché demasiado agresiva (limpiando en cada guardado)?
  • ¿Están configurados correctamente los tipos de post / grupos de campos?

Personalización de filtros

Cambiar la expiración de la caché

php add_filter('fieldforge/cache/expiration', function($seconds) { return DAY_IN_SECONDS; // Caché por 24 horas });

Desactivar caché para grupos de campos específicos

php add_filter('fieldforge/cache/should_cache', function($should_cache, $field_group) { if ($field_group === 'frequently-changing-group') { return false; } return $should_cache; }, 10, 2);

Lógica de invalidación personalizada

php add_action('fieldforge/cache/invalidate', function($post_id, $field_name) { // También invalida datos relacionados wp_cache_delete("my_custom_cache:{$post_id}", 'my_plugin'); }, 10, 2);


¿Listo para un rendimiento de campos personalizados de nivel empresarial?

Obtén Field Forge — desde $35/año →

La integración de caché de objetos y la carga por lotes están en todas las versiones de Field Forge, incluida la gratuita.

Asistente de IA de Forge En línea

¡Hola! Soy el asistente de IA de Field Forge. Pregúntame lo que quieras sobre el plugin — configuración, funciones, resolución de problemas o desarrollo.

Ahora mismo
Con la tecnología de Forge AI · Explorar documentación