Является ли has_shortcode () или get_post_meta () жирнее? - PullRequest
0 голосов
/ 01 июня 2019

Я хочу добавить body_class к страницам, если страница имеет определенный шорткод.

Какой из следующих методов будет наиболее эффективным, когда речь заходит о производительности?

  1. Используйте has_shortcode () как
function my_body_class($classes) {
    $post_id = get_the_ID();
    if( isset($post_id) && has_shortcode( $post->post_content, 'my_shortocde' ) ) {
        $classes = array_merge( $classes, array( 'my-body-tag' ));
    }
    return $classes;
}
add_filter( 'body_class', 'my_body_class', 10, 1 );
  1. Предположим, что в таблице post_meta для страницы есть пользовательский meta_key с мета-значением true, добавленным где-то еще в коде при обновлении страницы, и вы используете get_post_meta (), как
function my_body_class($classes) {
    $post_id = get_the_ID();
    if( isset($post_id) && get_post_meta($post_id, '_my_shortocde_is_used') ) {
        $classes = array_merge( $classes, array( 'my_body_tag' ));
    }
    return $classes;
}
add_filter( 'body_class', 'my_body_class', 10, 1 );

Что будет быстрее? Регулярное выражение, которое имеет has_shortcode, или запрос, который выполняет get_post_meta? Какой из них вы бы использовали?

ОБНОВЛЕНИЕ: Результаты синхронизации настенных часов согласно @ Rimarx

Вариант 1: использование has_shortcode ()

Wall clock time: 8.66254170735685E-06 = 0.00000866254170735685

Вариант 2: использование get_post_meta ()

Wall clock time: 2.88486480712892E-05 = 0.00002884864807128920

Использование побед has_shorcode.

Примечание: в этом тесте база данных mysql находится на том же сервере, что и WordPress.

1 Ответ

0 голосов
/ 01 июня 2019

Вы можете проверить скорость следующим образом:

<?php
$start = microtime(true);
//Your code 
echo 'The script time: ' . (microtime(true) - $start) . ' seconds';
?>

В качестве опции:

function my_body_class($classes) {
    $start = microtime(true);

    $post_id = get_the_ID();
    if( isset($post_id) && has_shortcode( $post->post_content, 'my_shortocde' ) ) {
        $classes = array_merge( $classes, array( 'my-body-tag' ));
    }

    return 'The script time: ' . (microtime(true) - $start) . ' seconds';
}
add_filter( 'body_class', 'my_body_class', 10, 1 );

Напишите результаты, если вы попробуете это:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...