function_exists性能成本

时间:2017-01-10 11:44:46

标签: php performance

有没有人有function_exists计算成本的数据? 我有这个片段:

if(function_exists('fastcgi_finish_request')) {
    fastcgi_finish_request();
}

只需要在dev环境中不存在该函数,但它始终存在于生产环境中。 由于我需要高效率(这个脚本每天被调用数百万次并且必须尽可能快),我应该在部署到生产之前删除此检查吗?

2 个答案:

答案 0 :(得分:0)

如果有时此功能可能不存在,则需要此功能。

您可以删除此检查并在不执行任何操作的开发环境中实现空方法function fastcgi_finish_request() {}

答案 1 :(得分:0)

我对性能也有同样的疑问,所以我做了一个简单的脚本来测试它,下面的代码和结果。

PHP 5.6.40 (1.000.000)
checkByFunction: 0.16808795928955
checkByVersion: 0.97429490089417

<?php
function checkByVersion($expectedMajor = 5, $expectedMinor = 5)
{
    //Explode (semver.org MAJOR.MINOR.PATCH)
    $phpversion = explode(".", phpversion());
    $phpversion_major = (int) $phpversion[0];
    $phpversion_minor = (int) $phpversion[1];

    //if php_version > 5 or 5.5
    if($phpversion_major > $expectedMajor || ($phpversion_major == $expectedMajor && $phpversion_minor >= $expectedMinor) ){
        return true;
    } else {
        return false;
    }
}

//Test
$iterations = 1000000;

$byFunctionTimeStart = 0;
$byFunctionTimeEnd = 0;

$byVersionTimeStart = 0;
$byVersionTimeEnd = 0;

//ByFunction
$byFunctionTimeStart = microtime(true);
for ($i=0; $i < $iterations; $i++) { 
    function_exists("curl_file_create");
}
$byFunctionTimeEnd = microtime(true);
$byFunctionTimeResult = $byFunctionTimeEnd - $byFunctionTimeStart;

//ByVersion
$byVersionTimeStart = microtime(true);
for ($i=0; $i < $iterations; $i++) { 
    checkByVersion();
}
$byVersionTimeEnd = microtime(true);
$byVersionTimeResult = $byVersionTimeEnd - $byVersionTimeStart;

echo "<pre>";
echo "PHP ".phpversion()." (".number_format($iterations, 0, ".", ".").")";
echo "<br/>checkByFunction: ".$byFunctionTimeResult;
echo "<br/>checkByVersion: ".$byVersionTimeResult;
echo "</pre>";