Как я могу ускорить мой раздел администратора WP?


12

У нас есть много сайтов WP с прокси между серверами, на которых они сидят, и Интернетом.

Некоторые вещи в WP просто не работают:

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

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

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


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

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

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

Это было там пару лет. Не уверен, когда именно он был добавлен. Я также искал способы ускорить страницы администратора, когда нашел эту статью
Роберт Хюэ,

1
В ответ пожалуйста. Кроме того, это было в течение очень долгого времени, вероятно (почти) столько же, сколько сам HTTP API.
Первый

Ответы:


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 Remove columns which you don't need
    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 и тому подобные вещи. Вы можете посмотреть на его источник для примеров, если вы не хотите полный пакет. Сергей обычно пишет очень читаемый код с большим использованием пустого пространства.


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

4

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

Это могут быть ваши ревизии, AJAX плагина, неверный запрос и т. Д.

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

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


2

Наряду с некоторыми из хорошо предложенных ответов выше, вы можете ограничить или отключить wordpress «heartbeat», который может значительно замедлить работу вашего администратора, если у вас открыто много экранов или много пользователей одновременно. Некоторые хосты, такие как 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 );

Нет проблем. Также добавлено еще несколько опций.
Брайан Уиллис
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.