有没有人有function_exists
计算成本的数据?
我有这个片段:
if(function_exists('fastcgi_finish_request')) {
fastcgi_finish_request();
}
只需要在dev环境中不存在该函数,但它始终存在于生产环境中。 由于我需要高效率(这个脚本每天被调用数百万次并且必须尽可能快),我应该在部署到生产之前删除此检查吗?
答案 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>";