Поддержка Проблемы и решения Нагрузка в админке

  • Здравствуйте, столкнулся с такой проблемой, что раздел «пользователи» начал загружаться боле 10 секунд. Установил плагин Query Monitor и обнаружил, что очень долго обрабатывается вот этот запрос: count_users()

    WP_List_Table->views() wp-admin/includes/class-wp-list-table.php:367 WP_Users_List_Table->get_views() wp-admin/includes/class-wp-users-list-table.php:157 count_users() wp-includes/user.php:1393

    Тоесть подсчет большого количества пользователей слишком нагружает систему. Подскажите его можно отключить ?

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • стесняюсь спросить — а какое у вас количество пользователей?

    100+к

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

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

    Да, с помощью фильтра pre_count_users. Например, так:

    function disable_role_counts() {
    	global $wpdb, $wp_roles;
    
    	$total_users = $wpdb->get_var(
    		"
    		SELECT COUNT(ID)
    		FROM {$wpdb->users}
    		"
    	);
    
    	$result = array(
    		'total_users' => $total_users,
    		'avail_roles' => array_fill_keys( array_keys( $wp_roles->get_names() ), 0 ),
    	);
    
    	return $result;
    }
    add_filter( 'pre_count_users', 'disable_role_counts' );

    Не сработало, еще варианты есть?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    А какая версия WP используется?

    До версии 6.0 у меня на тестовой установке с 200 000 пользователей экран «Пользователи» открывался около 30 секунд, а с этим кодом — практически мгновенно.

    С версии 6.0 появилась функция wp_is_large_user_count(), и если на сайте больше 10 000 пользователей, то функция count_users() на этом экране вообще не должна вызываться.

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

    • Ответ изменён 1 год, 1 месяц назад пользователем rootey.

    еще варианты есть?

    Как вариант можете рассмотреть кэширование данного запроса.

    Например как-то так:

    function get_cached_users_count() {
        $count = wp_cache_get( 'users_count', 'users' );
        if ( $count === false ) {
            $count = count_users();
            wp_cache_set( 'users_count', $count, 'users', 60*60*24 ); // Кэшируем результат на 24 часа
        }
        return $count;
    }
Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Нагрузка в админке» закрыта для новых ответов.