Jak mogę przyspieszyć moją sekcję administratora WP?

12

Mamy wiele witryn WP z proxy między serwerami, na których siedzą, a Internetem.

Niektóre rzeczy w WP po ​​prostu nie działają:

  • Kanały RSS na desce rozdzielczej
  • wyszukiwanie tematów
  • wyszukiwanie wtyczek
  • podstawowe aktualizacje

Robimy wszystko ręcznie i naprawdę nie ma żadnych problemów oprócz POWOLNOŚCI przy ładowaniu strony. Wygląda na to, że prawie wszystko w administracji zajmuje 4-5 sekund, z wyjątkiem dodawania multimediów - co jest zaskakująco szybkie.

Jakie są pierwsze rzeczy, które mogę sprawdzić lub zrobić, aby przyspieszyć back-end? (front-muchy)

Żądło
źródło
3
Możesz zablokować żądania zewnętrzne, definiując define( 'WP_HTTP_BLOCK_EXTERNAL', true );w wp-config.php. Również administrator WordPress wymienia Open Sansi inne czcionki z Google. Możesz to również wyłączyć. To sprawia, że ​​sekcja administracyjna ładowania jest trochę szybsza.
Robert hue
@Roberthue - wygląda na to, że wiele stron administratora wykonuje połączenia do sieci. Chcielibyśmy je wszystkie wyłączyć. Dodanie zewnętrznego blokowania żądań teraz, aby zobaczyć, jak zareaguje.
STing
1
@Roberthue - Nie jestem pewien, dlaczego nigdy wcześniej tego nie używałem - czy wiesz, kiedy WP_HTTP_BLOCK_EXTERNAL został po raz pierwszy wdrożony. Dodałem go do mojej wtyczki (mam wtyczkę, którą propaguję wszędzie) i jest sposób na szybsze ładowanie wszystkich stron. Dodaj to jako odpowiedź i wszelkie inne wskazówki dla gridless.
STing
Jest tam od kilku lat. Nie jestem pewien, kiedy dokładnie został dodany. Szukałem też sposobów na przyspieszenie stron administracyjnych, kiedy znalazłem ten artykuł
Robert hue
1
W odpowiedzi proszę. Jest też dostępny od bardzo dawna, prawdopodobnie (prawie) tak długo, jak sam interfejs API HTTP.
Rarst

Odpowiedzi:

12

jQuery / JavaScript w stopce

Jedną rzeczą, którą możesz zrobić, to przenieść jQuery do posta na blogu stopki . Domyślnie nie jest potrzebny w nagłówku. Będziesz musiał sprawdzić, czy wszystko nadal działa dobrze, ponieważ zwykle robię to tylko dla motywów:

<?php
/* Plugin Name: Move jQuery to the footer */
function( 'admin_enqueue_scripts', function( $hook )
{
    $GLOBALS['wp_scripts']->add_data( 'jquery', 'group', 1 );
} );

Zapytania

Kolejną rzeczą, która przyspiesza ekrany tabeli listy wpisów, jest zmniejszenie liczby zapytanych pól. Zauważyłem ten problem jakiś czas temu, gdy te ekrany ładowały się zbyt wolno z powodu moich ustawień 999 postów. Pełny post na blogu tutaj - Plugin jako 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",
    ) );
}

Jeśli nie potrzebujesz wszystkich kolumn, możesz rozszerzyć powyższą wtyczkę, usuwając również zawartość niektórych kolumn.

add_filter( 'manage_edit-post_columns', function( $columns )
{
    # @TODO Remove columns which you don't need
    return $defaults;
} );

Deska rozdzielcza

Każdy użytkownik wchodzi do pulpitu nawigacyjnego - co jest prawdopodobnie najwolniejszą częścią interfejsu użytkownika administratora. Możesz dezaktywować niektóre niepotrzebne widżety zamiast po prostu je ukryć:

<?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' );
} );

Dane wychodzące

Mogę tylko polecić użycie Snitcha przez Sergej Müller do monitorowania, jakie dane próbują opuścić instalację. Wtyczka pozwala ukryć wszystkie lub tylko określone połączenia, a także wskazać konkretne połączenia wewnętrzne, które są ukierunkowane na zadania, takie jak niepożądane zadania cron i podobne rzeczy. Możesz przejrzeć jego źródło przykładów, jeśli nie chcesz pełnego pakietu. Sergej zwykle pisze bardzo czytelny kod z dużym wykorzystaniem białych znaków.

kajzer
źródło
1
Przy pomocy obiektów debugowania wtyczki można także uzyskać przydatne informacje, aby sprawdzić, które zapytania, funkcje zostały uruchomione i jak długo ona działa. Również z której funkcji wtyczka pochodzi kwerenda.
bueltge
4

Zalecam zainstalowanie tego https://github.com/johnbillion/query-monitor i przyjrzenie się następującym zagadnieniom: Wykorzystanie pamięci, żądania HTTP, AJAX i powolne zapytania.

Mogą to być twoje wersje, AJAX wtyczki, złe zapytanie itp.

Będziesz mógł sprawdzić, czy potrzebujesz dodać więcej pamięci RAM do swojego serwera, co zwykle rozwiązuje wiele problemów z powolnym ładowaniem administratora, zwłaszcza jeśli masz wielu redaktorów w adminie.

Ale oprócz kilku sztuczek tutaj i nie ma wszystkiego w jednym rozwiązaniu, musisz sprawdzić, w jaki sposób motywy są wtyczkami współdziałającymi z administratorem.

Wyck
źródło
2

Wraz z niektórymi dobrze sugerowanymi odpowiedziami powyżej możesz ograniczyć lub wyłączyć wordpress „heartbeat”, co może radykalnie spowolnić administratora, jeśli masz otwartych wiele ekranów lub wielu użytkowników korzysta jednocześnie. Kilka hostów, takich jak WP-Engine, faktycznie automatycznie zmienia tę konfigurację.

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 );

Inną rzeczą, którą możesz spróbować, jest majstrowanie przy niektórych wp-config.phpstałych. Wyłączenie poprawek po opublikowaniu nie pomogłoby w zadawaniu pytań, ale jeśli nie chcesz tego zrobić, możesz przynajmniej ograniczyć poprawki.

define('WP_POST_REVISIONS', 5);

Dwie inne stałe, które zwykle zmieniam w celu optymalizacji, to puste kosze i automatyczne zapisywanie.

define('AUTOSAVE_INTERVAL', 600);
define( 'EMPTY_TRASH_DAYS', 3 );
Bryan Willis
źródło
Nie ma problemu. Dodano także kilka innych opcji.
Bryan Willis