has_shortcode()或get_post_meta()是否更胖?

时间:2019-06-01 18:26:00

标签: php wordpress

如果页面具有特定的短代码,我想向页面添加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,并且在更新页面时在代码的其他位置添加了meta_value为true的meta_value,并且您可以像这样使用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 :(得分:0)

您可以像这样检查速度

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

如果尝试这样做,请写结果:)