Almacenamiento de Tablas Personalizadas — Más Rápido Que wp_postmeta | Field Forge - Campos personalizados, diseñados para la velocidad
Descargar Iniciar sesión

Almacenamiento de Tablas Personalizadas — Más Rápido Que wp_postmeta

El problema de wp_postmeta

La tabla wp_postmeta de WordPress es un almacén genérico de clave-valor adjunto a cada publicación. Así es como se almacenan post_title frente a post_content frente a custom_field_x. El esquema se ve así:

sql CREATE TABLE wp_postmeta ( meta_id BIGINT(20) PRIMARY KEY, post_id BIGINT(20), meta_key VARCHAR(255), meta_value LONGTEXT, INDEX (post_id), INDEX (meta_key(191)) );

Sencillo. Flexible. Funciona para cualquier par clave-valor. Y en un sitio de WordPress típico con muchos plugins, es enorme: fácilmente millones de filas en un sitio de comercio electrónico de 5 años con muchos pedidos y metadatos de productos.

El problema de la consulta N+1

Esto es lo que sucede cuando cargas una página de archivo con 20 publicaciones, cada una con 10 campos personalizados:

“`sql — Consulta 1: Obtener publicaciones SELECT * FROM wp_posts WHERE post_type = ‘post’ LIMIT 20;

— Consultas 2-201: Para cada publicación, obtener cada campo SELECT meta_value FROM wp_postmeta WHERE post_id = 1 AND meta_key = ‘field_a’; SELECT meta_value FROM wp_postmeta WHERE post_id = 1 AND meta_key = ‘field_b’; — … 198 consultas más “`

200 consultas separadas. Cada consulta es rápida individualmente, pero la sobrecarga de ida y vuelta se acumula. En sitios que acceden a la base de datos a través de una red (común en hosting gestionado), esto puede añadir más de 500 ms a cada vista de página. El Desplazamiento Acumulativo del Diseño aumenta. Los Core Web Vitals disminuyen. El SEO sufre.

El problema del repetidor (peor)

Los campos repetidores en ACF se almacenan con una fila de metadatos por subcampo por fila. Un repetidor con 5 subcampos y 10 filas crea 50 entradas de metadatos por publicación. Agrega 20 publicaciones a un archivo y estarás viendo más de 1,000 consultas de metadatos en una sola vista de página. Esta es la razón por la que los sitios con mucho ACF notoriamente se ralentizan más allá de cierta escala.


La arquitectura de tabla personalizada de Field Forge

Field Forge almacena los valores de los campos en una tabla dedicada wp_fieldforge_values:

sql CREATE TABLE wp_fieldforge_values ( id BIGINT(20) PRIMARY KEY, post_id BIGINT(20) NOT NULL, field_group_id BIGINT(20) NOT NULL, field_name VARCHAR(255) NOT NULL, parent_id BIGINT(20) NULL, -- para valores anidados (repetidor/grupo/flex) row_index INT NULL, -- para la posición de la fila del repetidor value LONGTEXT, INDEX (post_id, field_name), INDEX (post_id, field_group_id), INDEX (parent_id, row_index) );

Diferencias clave respecto a wp_postmeta:

  • Índice compuesto en (post_id, field_name) — búsqueda de consulta única para cualquier campo específico en cualquier publicación específica
  • Columnas de jerarquía dedicadas (parent_id, row_index) — los valores anidados (repetidor, grupo, flex) están estructurados, no concatenados en cadena
  • Aislado de los metadatos principales — los plugins de WordPress que escriben en wp_postmeta no contaminan los datos del campo
  • Índices diseñados para el propósito — las consultas que realmente realiza Field Forge están optimizadas; el genérico wp_postmeta no lo está

Referencias

Realizamos referencias controladas en un sitio de prueba con 10,000 publicaciones, cada una con un grupo de campos que contiene 15 campos (3 texto, 2 WYSIWYG, 1 imagen, 1 repetidor con 5 subcampos, 1 contenido flexible con 3 tipos de diseño).

Carga de página de archivo (20 publicaciones, todos los campos renderizados)

wp_postmeta (ACF / SCF) Tabla personalizada de Field Forge
Consultas SQL 302 1 (batch_load)
Tiempo de consulta (DB local) 840ms 95ms
Tiempo de consulta (DB en red, +20ms RTT) 6,880ms 115ms
Primer Pintado de Contenido 2,100ms 340ms

Carga de página de publicación única (1 publicación, todos los campos renderizados)

wp_postmeta Field Forge
Consultas SQL 16 1
Tiempo de consulta (DB local) 45ms 12ms
Tiempo de consulta (DB en red, +20ms RTT) 365ms 32ms

Actualización masiva de campos (100 publicaciones, 10 campos cada una)

wp_postmeta Field Forge
Consultas SQL 1,000 INSERTs 1 INSERT de múltiples filas
Tiempo (DB local) 1,240ms 48ms
Tiempo (DB en red) 21,240ms 68ms

En bases de datos conectadas a la red (que es como funciona casi todo el hosting de WordPress gestionado — Kinsta, WP Engine, Cloudways, SiteGround Cloud, etc.), la diferencia es dramática. La latencia de ida y vuelta es el costo dominante, y Field Forge realiza menos viajes de ida y vuelta.


API de carga por lotes

API orientada a desarrolladores para carga por lotes explícita cuando la precarga automática de Field Forge no es suficiente:

“`php // Cargar campos para un conjunto específico de publicaciones en una consulta $post_ids = [1, 2, 3, 4, 5]; FieldForge::batch_load($post_ids);

// Ahora cualquier llamada a get_field() en estas publicaciones accede a la caché foreach ($post_ids as $id) { $hero = get_field(‘hero_title’, $id); // Sin consulta a la DB } “`

La llamada a batch_load() emite una única consulta WHERE post_id IN (...) y llena la caché en memoria de Field Forge para todas las publicaciones solicitadas. Las llamadas posteriores a get_field() son aciertos de caché.

Precarga automática

Field Forge se integra en el filtro the_posts de WordPress para precargar automáticamente campos para la consulta principal. Las páginas de archivo, los resultados de búsqueda y las listas de categorías obtienen datos de campo cargados por lotes automáticamente — no se requieren cambios de código.


Integración de caché de objetos

Field Forge respeta la API wp_cache_* de WordPress:

  • Con Redis o Memcached: los valores de los campos se almacenan en la caché de objetos con un TTL largo. Las cargas de página posteriores acceden a la caché, no a la base de datos.
  • Con caché transitoria predeterminada: aún utiliza la caché en memoria de WordPress para el ciclo de vida de la solicitud.
  • Grupo de caché separado: Field Forge utiliza su propio grupo de caché (fieldforge) para que no entre en conflicto con otros plugins u operaciones de caché del núcleo.

La invalidación de caché ocurre automáticamente en la actualización o eliminación de valores de campo a través de hooks de acción.


Lo que esto significa en la práctica

Para sitios de clientes de agencias

Páginas de archivo más rápidas, resultados de búsqueda más rápidos, plantillas dinámicas más rápidas. Los Core Web Vitals mejoran. La retención de clientes mejora porque el sitio “se siente ágil”.

Para comercio electrónico en WooCommerce

Páginas de listado de productos con más de 30 productos y campos personalizados complejos se renderizan en el mismo tiempo que sitios más simples. Las interacciones del carrito de compras son más rápidas porque las cargas de metadatos de productos se agrupan.

Para WordPress sin cabeza

Las respuestas de la API REST y WPGraphQL son más rápidas. Los generadores de sitios estáticos (Next.js ISR, Astro, Nuxt) realizan menos consultas a la base de datos por compilación. Los tiempos de compilación mejoran.

Para migración desde ACF / SCF

La capa de compatibilidad de ACF de Field Forge significa que las llamadas a get_field() en tu tema devuelven los mismos valores — pero provienen de la tabla personalizada, no de wp_postmeta. La mejora de rendimiento ocurre de manera transparente después de la migración.


Cuando wp_postmeta está bien

Para ser justos: si tu sitio tiene menos de 500 publicaciones y campos personalizados simples (sin repetidores profundos, sin contenido flexible), el enfoque de wp_postmeta funciona. No notarás una diferencia de velocidad. La ventaja de rendimiento de Field Forge se vuelve significativa a gran escala — más de 1,000 publicaciones, repetidores complejos, o sitios en bases de datos conectadas a la red.


¿Listo para campos personalizados de WordPress más rápidos?

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

El almacenamiento de tablas personalizadas está incluido en cada versión 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