¿Cómo puedo acelerar mi sección de administración de WordPress?
Tenemos varios sitios WordPress con un proxy entre los servidores donde se alojan e internet.
Algunas funciones en WordPress simplemente no funcionan:
- Feeds RSS en el escritorio
- Búsqueda de temas
- Búsqueda de plugins
- Actualizaciones del núcleo
Hacemos todo manualmente y realmente no hay problemas excepto por la LENTITUD en la carga de páginas. Parece que casi todo en el administrador tarda 4-5 segundos en procesarse, excepto la carga de medios, que sorprendentemente es rápida.
¿Cuáles son algunas cosas iniciales que puedo verificar o hacer para acelerar el backend? (el frontend funciona muy rápido)
jQuery / JavaScript en el pie de página
Una cosa que puedes hacer es mover jQuery al pie de página artículo del blog. Por defecto no es necesario en el encabezado. Tendrás que verificar si todo sigue funcionando, ya que normalmente solo hago esto para temas:
<?php
/* Plugin Name: Mover jQuery al pie de página */
function( 'admin_enqueue_scripts', function( $hook )
{
$GLOBALS['wp_scripts']->add_data( 'jquery', 'group', 1 );
} );
Consultas
Otra cosa que acelera las pantallas de listado de publicaciones es reducir el número de campos consultados. Noté ese problema hace un tiempo cuando esas pantallas se cargaban demasiado lento debido a mi configuración de 999 publicaciones. Artículo completo aquí - Plugin como GitHub Gist.
<?php
/**
* Plugin Name: (WCM) Listas de publicaciones en admin más rápidas
* AuthorURL: http://unserkaiser.com
* License: MIT
*/
add_filter( 'posts_fields', 'wcm_limit_post_fields_cb', 0, 2 );
function wcm_limit_post_fields_cb( $fields, $query )
{
if (
! is_admin()
OR ! $query->is_main_query()
OR ( defined( 'DOING_AJAX' ) AND DOING_AJAX )
OR ( defined( 'DOING_CRON' ) AND DOING_CRON )
)
return $fields;
$p = $GLOBALS['wpdb']->posts;
return implode( ",", array(
"{$p}.ID",
"{$p}.post_date",
"{$p}.post_name",
"{$p}.post_title",
"{$p}.ping_status",
"{$p}.post_author",
"{$p}.post_password",
"{$p}.comment_status",
) );
}
Si no necesitas todas las columnas, podrías extender el plugin anterior eliminando también el contenido de algunas columnas.
add_filter( 'manage_edit-post_columns', function( $columns )
{
# @TODO Elimina las columnas que no necesites
return $defaults;
} );
Escritorio
Cada usuario entra al escritorio - que probablemente es la parte más lenta de la interfaz de administración. Podrías desactivar algunos widgets que no necesites, en lugar de solo ocultarlos:
<?php
/** Plugin Name: Eliminar widgets del escritorio */
add_action( 'wp_dashboard_setup', function()
{
remove_meta_box( 'dashboard_plugins', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_primary', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_primary', 'dashboard', 'side' );
remove_meta_box( 'dashboard_activity', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_right_now', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_secondary', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' );
remove_meta_box( 'dashboard_browser_nag', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_recent_drafts', 'dashboard', 'side' );
remove_meta_box( 'dashboard_incoming_links', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_incoming_links', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_recent_comments', 'dashboard', 'normal' );
} );
Datos salientes
Solo puedo recomendar usar Snitch de Sergej Müller para monitorear qué datos intentan salir de tu instalación. El plugin permite suprimir todas o solo conexiones específicas, así como identificar conexiones internas específicas que apuntan a tareas como trabajos cron no deseados y cosas similares. Puedes mirar su código fuente para ejemplos si no quieres el paquete completo. Sergej normalmente escribe código muy legible con un uso generoso de espacios en blanco.

Recomiendo instalar este https://github.com/johnbillion/query-monitor y revisar lo siguiente: Uso de memoria, solicitudes HTTP, AJAX y consultas lentas.
Podrían ser tus revisiones, AJAX de un plugin, una consulta mal optimizada, etc.
Podrás ver si necesitas añadir más RAM a tu servidor, lo que normalmente resuelve muchos problemas de lentitud en el admin, especialmente si tienes múltiples editores trabajando en el panel de administración.
Pero además de algunos trucos aquí y allá, no hay una solución mágica, necesitas investigar cómo los temas y plugins están interactuando con el administrador.

Junto con algunas de las respuestas bien sugeridas anteriormente, podrías limitar o desactivar el "heartbeat" de WordPress, lo que puede ralentizar dramáticamente tu administrador si tienes muchas pantallas abiertas o muchos usuarios trabajando simultáneamente. Varios hosts como WP-Engine tienen una variación de esta configuración automáticamente.
function optimize_heartbeat_settings( $settings ) {
$settings['autostart'] = false;
$settings['interval'] = 60;
return $settings;
}
add_filter( 'heartbeat_settings', 'optimize_heartbeat_settings' );
function disable_heartbeat_unless_post_edit_screen() {
global $pagenow;
if ( $pagenow != 'post.php' && $pagenow != 'post-new.php' )
wp_deregister_script('heartbeat');
}
add_action( 'init', 'disable_heartbeat_unless_post_edit_screen', 1 );
Otra cosa que podrías probar es ajustar algunas de las constantes en wp-config.php
. Desactivar las revisiones de publicaciones sin duda ayudaría, pero si no quieres hacer eso, al menos podrías limitar las revisiones.
define('WP_POST_REVISIONS', 5);
Otras dos constantes que suelo cambiar para mantener las cosas optimizadas son las de vaciar la papelera y el autoguardado.
define('AUTOSAVE_INTERVAL', 600);
define( 'EMPTY_TRASH_DAYS', 3 );
