WP_START_OBJECT_CACHE(): Использование и особенности │ WP 3.0.0

WP_START_OBJECT_CACHE() │ WP 3.0.0

Введение

Функция WP_START_OBJECT_CACHE() запускает объектный кэш в WordPress. Если в директории wp-content существует файл object-cache.php, эта функция будет использовать его в качестве внешнего объекта кэша.

Важно отметить, что это внутренняя функция, предназначенная для использования только ядром WordPress, поэтому не рекомендуется использовать её в вашем коде.

Хуки функции

  • enable_loading_object_cache_dropin — этот хук позволяет включить загрузку object-cache.php и используется до того, как он будет доступен для плагинов.

Возврат

  • Функция ничего не возвращает (null).

Использование

Для запуска кэша используйте следующую команду:

wp_start_object_cache();

Пример использования

Несмотря на название, примеры использования этой функции не имеют смысла, так как она вызывается автоматически в файле wp-settings.php на ранних этапах загрузки ядра WordPress.

Добавьте свой собственный пример.

Заметки

  • Глобальный массив: $wp_filter хранит все фильтры.

История изменений

  • Версия 3.0.0: функция была введена.

Код функции WP_START_OBJECT_CACHE()

Функция wp_start_object_cache() написана в файле wp-includes/load.php. Вот её код:


function wp_start_object_cache() {
global $wp_filter;
static $first_init = true;

// Производим проверки только один раз.

/**
 * Фильтр, который определяет, будет ли загружен drop-in object-cache.php.
 *
 * Этот фильтр выполняется до того, как он может быть использован плагинами.
 * Он предназначен для выполнения вне веба. Если возвращается false,
 * object-cache.php не будет загружен.
 *
 * @since 5.8.0
 *
 * @param bool $enable_object_cache следует ли включить загрузку object-cache.php (если он присутствует).
 *                                   По умолчанию true.
 */
if ( $first_init && apply_filters( 'enable_loading_object_cache_dropin', true ) ) {
    if ( ! function_exists( 'wp_cache_init' ) ) {
        /*
         * Это обычная ситуация. Первый запуск этой функции. 
         * Кэш-задний план не загружен.
         *
         * Пытаемся загрузить пользовательский кэш-задний план,
         * и если в результате в системе появляется функция wp_cache_init(),
         * отмечаем, что используется внешний объектный кэш.
         */
        if ( file_exists( WP_CONTENT_DIR . '/object-cache.php' ) ) {
            require_once WP_CONTENT_DIR . '/object-cache.php';

            if ( function_exists( 'wp_cache_init' ) ) {
                wp_using_ext_object_cache( true );
            }

            // Переинициализация любых хуков, добавленных вручную object-cache.php.
            if ( $wp_filter ) {
                $wp_filter = WP_Hook::build_preinitialized_hooks( $wp_filter );
            }
        }
    } elseif ( ! wp_using_ext_object_cache() && file_exists( WP_CONTENT_DIR . '/object-cache.php' ) ) {
        /*
         * В некоторых случаях advanced-cache.php может загрузить object-cache.php до
         * того, как эта функция будет выполнена. Это нарушает проверку function_exists()
         * выше и может привести к тому, что wp_using_ext_object_cache() вернёт
         * false, когда на самом деле используется внешний кэш.
         */
        wp_using_ext_object_cache( true );
    }
}

if ( ! wp_using_ext_object_cache() ) {
    require_once ABSPATH . WPINC . '/cache.php';
}

require_once ABSPATH . WPINC . '/cache-compat.php';

/*
 * Если кэш поддерживает сброс, выполняем сброс вместо инициализации, если он уже
 * инициализирован. Сброс сигнализирует кэшу, что глобальные ID
 * изменились, и он, возможно, должен обновить ключи и почистить кэши.
 */
if ( ! $first_init && function_exists( 'wp_cache_switch_to_blog' ) ) {
    wp_cache_switch_to_blog( get_current_blog_id() );
} elseif ( function_exists( 'wp_cache_init' ) ) {
    wp_cache_init();
}

if ( function_exists( 'wp_cache_add_global_groups' ) ) {
    wp_cache_add_global_groups(
        array(
            'blog-details',
            'blog-id-cache',
            'blog-lookup',
            'blog_meta',
            'global-posts',
            'image_editor',
            'networks',
            'network-queries',
            'sites',
            'site-details',
            'site-options',
            'site-queries',
            'site-transient',
            'theme_files',
            'translation_files',
            'rss',
            'users',
            'user-queries',
            'user_meta',
            'useremail',
            'userlogins',
            'userslugs',
        )
    );

    wp_cache_add_non_persistent_groups( array( 'counts', 'plugins', 'theme_json' ) );
}

$first_init = false;

}

Заключение

В этой статье мы изучили функцию wp_start_object_cache() в WordPress. Она запускает механизм кэширования объектов, что позволяет ускорить выполнение запросов и улучшить производительность сайта. Несмотря на то, что она не предназначена для использования напрямую в коде, понимание её работы поможет вам лучше разобраться в том, как WordPress управляет кэшированием.

Если вы хотите изучить другие функции и настройки WordPress, продолжайте следить за нашими обновлениями!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *