我有一個簡單的方法:爲什麼無用的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