Как ускорить работу панели администратора WordPress?
У нас есть множество сайтов на WordPress с прокси-сервером между серверами, на которых они размещены, и интернетом.
Некоторые функции в WordPress просто не работают:
- RSS-ленты на панели управления
- поиск тем оформления
- поиск плагинов
- обновления ядра
Мы делаем всё вручную, и в целом проблем нет, кроме МЕДЛЕННОЙ загрузки страниц. Похоже, что почти все действия в панели администратора занимают 4-5 секунд для обработки, за исключением добавления медиафайлов - что удивительно быстро.
Какие первоначальные проверки я могу выполнить или что сделать для ускорения работы панели администратора? (фронтенд работает очень быстро)

jQuery / JavaScript в футере
Один из способов ускорения - перенос jQuery в подвал статья в блоге. По умолчанию она не нужна в шапке. Однако нужно проверить, что всё продолжает работать корректно, так как я обычно применяю это только для тем:
<?php
/* Plugin Name: Move jQuery to the footer */
function( 'admin_enqueue_scripts', function( $hook )
{
$GLOBALS['wp_scripts']->add_data( 'jquery', 'group', 1 );
} );
Запросы
Ещё один способ ускорения экранов со списком записей - сокращение количества запрашиваемых полей. Я заметил эту проблему, когда эти страницы начали грузиться слишком медленно из-за моей настройки 999 записей. Полная статья в блоге здесь - Плагин на GitHub Gist.
<?php
/**
* Plugin Name: (WCM) Faster Admin Post Lists
* 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",
) );
}
Если вам не нужны все колонки, вы можете расширить этот плагин, удалив содержимое некоторых колонок.
add_filter( 'manage_edit-post_columns', function( $columns )
{
# @TODO Удалите колонки, которые вам не нужны
return $defaults;
} );
Консоль
Каждый пользователь попадает в консоль - возможно, это самая медленная часть админки. Вы можете отключить ненужные виджеты вместо их простого скрытия:
<?php
/** Plugin Name: Remove Dashboard Widgets */
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' );
} );
Исходящие данные
Я могу порекомендовать использовать Snitch от Sergej Müller для мониторинга данных, которые пытаются покинуть вашу установку. Этот плагин позволяет блокировать все или только определённые соединения, а также выявлять внутренние соединения, связанные с нежелательными cron-заданиями и подобными вещами. Вы можете изучить его исходный код для примеров, если не хотите использовать весь пакет. Sergej обычно пишет очень читаемый код с щедрым использованием пробелов.

Я рекомендую установить этот https://github.com/johnbillion/query-monitor плагин и проверить следующее: использование памяти, HTTP-запросы, AJAX и медленные запросы.
Причиной могут быть ревизии, AJAX какого-то плагина, плохой запрос и т.д.
Вы сможете определить, нужно ли добавить больше оперативной памяти на сервер - это часто решает проблемы с медленной загрузкой админки, особенно если у вас несколько редакторов работают одновременно.
Но кроме некоторых локальных решений, универсального способа нет - нужно анализировать как темы и плагины взаимодействуют с админкой.

В дополнение к некоторым из уже предложенных выше ответов, вы можете ограничить или отключить "heartbeat" в WordPress, что может значительно замедлить работу админки, если у вас открыто много экранов или одновременно работает много пользователей. Некоторые хостинги, такие как WP-Engine, уже автоматически используют подобные настройки.
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 );
Еще одна вещь, которую вы можете попробовать, — это изменить некоторые константы в файле wp-config.php
. Отключение ревизий записей точно поможет, но если вы не хотите этого делать, можно хотя бы ограничить их количество.
define('WP_POST_REVISIONS', 5);
Еще две константы, которые я обычно изменяю для оптимизации, — это очистка корзины и интервал автосохранения.
define('AUTOSAVE_INTERVAL', 600);
define( 'EMPTY_TRASH_DAYS', 3 );
