我有一个简单的方法:为什么无用的IF子句会提高性能?
public function validateStringByPrefix(string $string, $prefix)
{
$valid = false;
if (is_string($prefix)) {
if (! empty($prefix) && strpos($string, $prefix) === 0) {
$valid = true;
}
} elseif (is_array($prefix)) {
foreach ($prefix as $partPrefix) {
if (! empty($partPrefix) && strpos($string, $partPrefix) === 0) {
$valid = true;
break;
}
}
}
return $valid;
}
我发现后,该条件! empty($prefix)
实际上是不必要的,我删除了它。我期望性能提升最少,或至少与变更前相同。但是,性能变差了。
它只能有意义,如果实际上有一个空的$prefix
或$partPrefix
的情况。由于empty(...)
支票将非常便宜。
但有没有这样的情况下,我检查了这一点:
if(empty($prefix)) {
die(__FILE__);
}
前:Webgrind(百分比),与if(! empty(...))
后:Webgrind(以百分比表示),无if(! empty(...))
那么什么能解释这种行为呢?为什么总是失败的不必要的IF
子句会提高性能?
UPDATE
只是拍了一下到Webgrind毫秒报道:
前:Webgrind(毫秒),与if(! empty(...))
后:Webgrind(以毫秒为单位),不if(! empty(...))
所以,以毫秒为单位消除不必要IF
条款的统计增加了性能......如何的结果百分之结果以毫秒为单位的不同?
您是如何设法评估性能的? –
@Zeratops是正确的。 –
Xdebug Profiler + Webgrind。只是添加了这两种情况下的屏幕截图。 – automatix