有人有关于function_exists
计算成本的数据吗?我有个片段:
if(function_exists('fastcgi_finish_request')) {
fastcgi_finish_request();
}
之所以需要它,只是因为这个函数在dev环境中不存在,但是它将始终存在于生产中。由于我需要高效率(这个脚本每天被调用数百万次,并且必须尽可能快),我应该在部署到生产之前删除这个检查吗?
发布于 2017-01-10 11:47:36
如果有时该函数可能不存在,则需要此函数。
您可以删除此检查,并在不执行任何操作的dev环境中实现空方法function fastcgi_finish_request() {}
。
发布于 2020-07-24 14:49:12
我对性能也有同样的问题,所以我做了一个简单的脚本来测试它,下面的代码和结果。
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>";
https://stackoverflow.com/questions/41568048
复制相似问题