Как ускорить работу панели администратора WordPress?

28 окт. 2014 г., 17:28:41
Просмотры: 20.4K
Голосов: 12

У нас есть множество сайтов на WordPress с прокси-сервером между серверами, на которых они размещены, и интернетом.

Некоторые функции в WordPress просто не работают:

  • RSS-ленты на панели управления
  • поиск тем оформления
  • поиск плагинов
  • обновления ядра

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

Какие первоначальные проверки я могу выполнить или что сделать для ускорения работы панели администратора? (фронтенд работает очень быстро)

5
Комментарии

Вы можете блокировать внешние запросы, добавив define( 'WP_HTTP_BLOCK_EXTERNAL', true ); в файл wp-config.php. Также админка WordPress подгружает шрифт Open Sans и другие шрифты из Google. Это тоже можно отключить. Это немного ускорит загрузку админ-раздела.

Robert hue Robert hue
28 окт. 2014 г. 17:53:11

@Roberthue - похоже, что многие страницы в админке делают вызовы во внешний интернет. Мы хотели бы отключить их все. Добавляю сейчас блокировку внешних запросов, чтобы посмотреть, как это отразится.

STing STing
28 окт. 2014 г. 18:04:53

@Roberthue - Не уверен, почему я раньше не использовал это - ты не знаешь, когда впервые появилась WP_HTTP_BLOCK_EXTERNAL? Я добавил это в свой плагин (у меня есть плагин, который я распространяю везде) и теперь все страницы грузятся намного быстрее. Пожалуйста, добавь это как ответ и любые другие советы для минималистов.

STing STing
28 окт. 2014 г. 18:15:01

Эта функция существует уже несколько лет. Не уверен точно, когда она была добавлена. Я тоже искал способы ускорения административных страниц, когда наткнулся на эту статью.

Robert hue Robert hue
28 окт. 2014 г. 18:53:26

Ответьте, пожалуйста. Кроме того, эта функция существует очень давно, вероятно, (почти) столько же, сколько сам HTTP API.

Rarst Rarst
28 окт. 2014 г. 19:53:49
Все ответы на вопрос 3
1
12

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 обычно пишет очень читаемый код с щедрым использованием пробелов.

31 окт. 2014 г. 01:25:33
Комментарии

Вы также можете получить полезную информацию с помощью плагина Debug Objects, чтобы увидеть, какие запросы и функции были выполнены, сколько времени они заняли, а также из какой функции или плагина поступил запрос.

bueltge bueltge
12 февр. 2015 г. 18:06:37
0

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

Причиной могут быть ревизии, AJAX какого-то плагина, плохой запрос и т.д.

Вы сможете определить, нужно ли добавить больше оперативной памяти на сервер - это часто решает проблемы с медленной загрузкой админки, особенно если у вас несколько редакторов работают одновременно.

Но кроме некоторых локальных решений, универсального способа нет - нужно анализировать как темы и плагины взаимодействуют с админкой.

31 окт. 2014 г. 02:47:26
1

В дополнение к некоторым из уже предложенных выше ответов, вы можете ограничить или отключить "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 );
29 мар. 2016 г. 19:34:21
Комментарии

Без проблем. Добавил еще несколько вариантов.

Bryan Willis Bryan Willis
31 мар. 2016 г. 01:37:57