Cum pot optimiza secțiunea de administrare WordPress?
Avem mai multe site-uri WordPress cu un proxy între serverele pe care rulează și internet.
Unele funcționalități în WordPress pur și simplu nu funcționează:
- feed-urile RSS în dashboard
- căutarea temelor
- căutarea plugin-urilor
- actualizările de core
Facem totul manual și nu sunt probleme reale cu excepția LENTORILOR la încărcarea paginilor. Se pare că aproape totul în panoul de administrare durează 4-5 secunde pentru a se procesa, cu excepția adăugării fișierelor media - care este surprinzător de rapidă.
Care sunt primele lucruri pe care le pot verifica sau face pentru a accelera back-end-ul? (front-end-ul merge foarte rapid)

jQuery / JavaScript în footer
Un lucru pe care îl poți face este să muți jQuery în footer post pe blog. În mod implicit nu este necesar în header. Va trebui să verifici dacă totul funcționează corect, de obicei fac asta doar pentru teme:
<?php
/* Plugin Name: Mută jQuery în footer */
function( 'admin_enqueue_scripts', function( $hook )
{
$GLOBALS['wp_scripts']->add_data( 'jquery', 'group', 1 );
} );
Interogări
Un alt lucru care accelerează ecranele cu lista de postări este reducerea numărului de câmpuri interogate. Am observat această problemă acum ceva timp când aceste ecrane se încărcau prea lent din cauza setărilor mele de 999 de postări. Postare completă aici - Plugin ca GitHub Gist.
<?php
/**
* Plugin Name: (WCM) Liste de Postări Admin Mai Rapide
* 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",
) );
}
Dacă nu ai nevoie de toate coloanele, poți extinde pluginul de mai sus prin eliminarea conținutului unor coloane.
add_filter( 'manage_edit-post_columns', function( $columns )
{
# @TODO Elimină coloanele de care nu ai nevoie
return $defaults;
} );
Panou de control
Fiecare utilizator intră în panoul de control - care este probabil cea mai lentă parte din interfața de administrare. Poți dezactiva unele widget-uri de care nu ai nevoie, în loc să le ascunzi:
<?php
/** Plugin Name: Elimină Widget-urile din Panou */
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' );
} );
Date de ieșire
Pot recomanda doar utilizarea Snitch de Sergej Müller pentru a monitoriza ce date încearcă să părăsească instalarea ta. Pluginul permite suprima toate sau doar anumite conexiuni, precum și identificarea conexiunilor interne care vizează sarcini precum job-uri cron nedorite și lucruri similare. Poți analiza codul său pentru exemple dacă nu dorești pachetul complet. Sergej scrie de obicei cod foarte lizibil, cu utilizare generoasă a spațiilor albe.

Recomand instalarea acestui https://github.com/johnbillion/query-monitor și verificarea următoarelor: utilizarea memoriei, cererile HTTP, AJAX și interogările lente.
Problema ar putea fi din cauza reviziilor, a unui plugin care folosește AJAX, a unei interogări neoptimizate, etc.
Veți putea vedea dacă este necesar să adăugați mai multă memorie RAM pe server, ceea ce de obicei rezolvă multe probleme de încărcare lentă în panoul de administrare, mai ales dacă aveți mai mulți editori care lucrează simultan.
Dar în afară de câteva trucuri și optimizări, nu există o soluție universală - trebuie să analizați cum interacționează temele și pluginurile în panoul de administrare.

În plus față de unele dintre sugestiile de mai sus, puteți limita sau dezactiva funcția "heartbeat" din WordPress, care poate încetini semnificativ administrarea dacă aveți multe ferestre deschise sau mulți utilizatori activi simultan. Mai multe găzduiri precum WP-Engine au deja o variantă a acestei configurări implementată automat.
function optimize_heartbeat_settings( $settings ) {
$settings['autostart'] = false; // Dezactivează pornirea automată a heartbeat
$settings['interval'] = 60; // Setează intervalul la 60 de secunde
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'); // Dezactivează heartbeat pe toate paginile în afară de editarea postărilor
}
add_action( 'init', 'disable_heartbeat_unless_post_edit_screen', 1 );
Un alt lucru pe care îl puteți încerca este ajustarea unor constante din wp-config.php
. Dezactivarea reviziilor postărilor ar ajuta cu siguranță, dar dacă nu doriți să faceți acest lucru, puteți cel puțin limita numărul de revizii.
define('WP_POST_REVISIONS', 5); // Limitează numărul de revizii la 5
Alte două constante pe care le modific de obicei pentru a menține optimizarea sunt cele pentru golirea coșului și autosalvare.
define('AUTOSAVE_INTERVAL', 600); // Setează intervalul de autosalvare la 600 de secunde (10 minute)
define( 'EMPTY_TRASH_DAYS', 3 ); // Golirea automată a coșului după 3 zile
