Estrategia de caché para operaciones masivas
Las guardadas masivas crean o actualizan decenas de entradas en una sola petición. Con el comportamiento predeterminado, cada fila activaría toda la cadena de guardado y una purga de la caché de página, lo que haría que la petición dependiera de la CPU. Fenómenus adopta un enfoque deliberado que las integraciones deberían replicar.
Qué hace una guardada masiva
Alrededor del bucle:
- Aplaza el conteo de términos, restaurando el valor anterior después.
- Suspende la invalidación de caché durante toda la operación, restaurándola después.
- Activa el modo de guardado masivo, que suprime los efectos secundarios de la pantalla de edición.
- Suprime las purgas de caché de página por fila mediante un filtro.
Después del bucle, en un bloque de finally:
- Restaura el conteo de términos y la invalidación de caché.
- Limpia la caché de entradas de cada entrada afectada.
- Elimina el filtro de supresión de purgas.
- Purga la caché de página una sola vez, si algo cambió.
El filtro de purga
La purga por fila se suprime devolviendo false desde el filtro de decisión propio de la caché de página:
add_filter( 'pom_cache_should_delete_site_cache', 'pom_rm_disable_pom_cache_flush', 10, 2 );
// … the batch …
remove_filter( 'pom_cache_should_delete_site_cache', 'pom_rm_disable_pom_cache_flush', 10 );
A continuación, se emite una única purga para todo el lote, con una cadena de contexto que identifica la operación.
El resultado: una purga por importación en lugar de una por fila, y un menú público que se actualiza en un solo paso cuando termina el lote.
Modo de guardado masivo
Mientras el modo está activo, se omiten los comportamientos de la pantalla de edición:
- la detección automática de imagen destacada desde la galería;
- la asignación automática de categoría al publicar.
Por eso una importación sin categoría seleccionada deja los elementos sin categorizar en lugar de clasificarlos arbitrariamente.
El código personalizado que engancha save_post para estos tipos de contenido debería comprobar el modo y omitir el trabajo que solo tiene sentido para una única edición interactiva:
if ( function_exists( 'pom_rm_is_bulk_post_save_mode' ) && pom_rm_is_bulk_post_save_mode() ) {
return;
}
Ordenar las escrituras
Mover una fila coincidente al final del orden del menú actualiza únicamente menu_order, en una fila ya resuelta por ID, en lugar de ejecutar una actualización completa de la entrada. Las cachés de entradas de los ID afectados se limpian una vez después del lote.
Reproduce ese patrón en las herramientas masivas personalizadas: una actualización completa por fila para cambiar un solo número entero es la causa más habitual de una importación lenta.
Implicaciones para otras cachés
La purga única cubre la caché de página del propio sitio. No:
- invalida una CDN;
- reconstruye un PDF generado;
- actualiza nada impreso.
Por tanto, un cambio masivo termina con tres consideraciones manuales: purga el borde si existe, regenera los PDF y comprueba si algún material impreso hacía referencia a algo que se movió.
Guía para herramientas masivas personalizadas
- Aplaza el conteo de términos y suspende la invalidación de caché alrededor del bucle.
- Activa el modo de guardado masivo para omitir los efectos secundarios propios del producto.
- Suprime las purgas por fila y emite una sola al final.
- Limpia las cachés de entradas de los ID afectados.
- Restaura cada indicador en un bloque de
finally, para que una excepción no pueda dejar el sitio con la invalidación suspendida.