调用函数\\u exists()时,应用\\u filters()的速度是快还是慢。。。还是差异太小,不应该考虑?
我在Kaiser的基础上做了一些测试,结果表明,在同时存在函数和过滤器的情况下,function\\u exists()的速度大约是3倍。如果过滤器不存在,速度将提高约11倍。没想到会这样。
function taco_party() {
return true;
}
add_filter( \'taco-party\', \'taco_party\' );
timer_start();
for ( $i = 0; $i < 1000000; $i++ ) {
$test = apply_filters( \'taco-party\', \'\' );
}
echo( \'Seconds: \' . timer_stop( 0, 10 ) . \'<br />\' );
timer_start();
for ( $i = 0; $i < 1000000; $i++ ) {
if ( function_exists( \'taco_party\' ) ) {
$test = taco_party();
}
}
echo( \'Seconds: \' . timer_stop( 0, 10 ) . \'<br />\' );
请记住,每个方法运行1000000次,这是相当多的。每运行一次的方法都会非常、非常快地完成:
Test 1: 0.0000491142
Test 2: 0.0000140667
我的结论是,差异不是问题。
SO网友:Chip Bennett
我不知道一个比另一个快还是慢,但我建议使用apply_filters()
是更好的方法,因为它更干净,更直观(从“WordPress方式”的意义上来说)。
EDIT
如果您正在进行比较测试,是否应该比较执行以下操作所需的时间:
这是:
<?php
if ( ! function_exists( \'taco_party\' ) ) {
function taco_party( $salsa = true ) {
return $salsa;
}
}
function taco_party( $salsa = true ) {
return $salsa;
}
?>
与此相比:
<?php
function taco_party( $salsa = true ) {
return apply_filters( \'taco-party\', $salsa );
}
function hot_salsa() {
$salsa = true;
return $salsa;
}
add_filter( \'taco-party\', \'hot_salsa\' );
?>
这不仅仅是检查函数或过滤器是否存在所需的时间,而是做某事所需的时间。
SO网友:kaiser
好的,在运行了几个测试之后,我可以看到has_filter
完成(非常规安装)所需时间比function_exists
:
// You have to uncomment one or the other to run the test
// don\'t run timer_xy() functions behind each other - the result is then wrong
timer_start();
$output = \' false \';
for ( $i = 0; $i < 1000000; $i++ )
{
// if ( function_exists(\'wp_login\') ) $output = \' true \';
if ( has_filter( \'shutdown\' ) ) $output = \' true \';
}
echo $output;
echo(\'Seconds: \' . timer_stop(0,10) . \'<br />\');
这是我用来测试的代码。它被设置在函数的顶部。php文件