我对全局参数和函数参数做了一些测试,结果都是徒劳的。
但是当我测试的时候,我发现$GLOBALS大约慢了10%。而不是使用函数参数或全局关键字。有人想解释原因吗?
我希望进一步了解PHP背后的机制。这样我就可以在futur dev上做出更好的妥协。除了一些例外情况外,我从未使用过$GLOBALS。
$md5 = md5(1000000);
function byGlobal() {
global $md5;
$c = 0;
while( md5($c) != $md5 ){
$c++;
}
}
function superGlobal() {
$c = 0;
while( md5($c) != $GLOBALS[ 'md5' ] ){
$c++;
}
}
function asParam($md5) {
$c = 0;
while( md5($c) != $md5 ){
$c++;
}
}
$time3 = microtime(true);
asParam($md5);
echo (microtime(true) - $time3);
echo "<br/>";
$time1 = microtime(true);
byGlobal();
echo (microtime(true) - $time1);
echo "<br/>";
$time2 = microtime(true);
superGlobal();
echo (microtime(true) - $time2);
echo "<br/>";我不是在争论功能与全球或良好的实践。我真想知道为什么会有这么大的差别。运行了20次测试,结果基本一致。
第一轮
as param :0.8601 全球排名:0.8262秒与$GLOBALS :0.9463秒(慢速10%以上)
第二轮
as param :0.8100 全球: 0.8058s为$GLOBALS : 0.9624s (再慢10%以上)
相关研究:(主要讨论全球最佳实践,不涉及$GLOBALS与全球绩效。
The advantage / disadvantage between global variables and function parameters in PHP?
发布于 2017-03-30 23:04:23
编辑:新版本,我犯了第一个错误。
我重写了你的测试,所以它确实测试了你想要的东西:
<?php
$value = 6235;
function byGlobal() {
global $value;
return $value++;
}
function superGlobal() {
return $GLOBALS['value']++;
}
function asParam($parameter) {
return $parameter++;
}
$time = microtime(true);
for ($i = 0;$i < 10000000;$i++) $value = asParam($value);
echo 'asParam: '.(microtime(true)-$time).'<br/>';
$time = microtime(true);
for ($i = 0;$i < 10000000;$i++) $value = byGlobal();
echo 'byGlobal: '.(microtime(true)-$time).'<br/>';
$time = microtime(true);
for ($i = 0;$i < 10000000;$i++) $value = superGlobal();
echo 'superGlobal: '.(microtime(true)-$time).'<br/>';PHP7.0.17在CentOs7上的示例结果:
asParam: 0.43703699111938
byGlobal: 0.55213189125061
superGlobal: 0.70462608337402和
asParam: 0.4569981098175
byGlobal: 0.55681920051575
superGlobal: 0.76146912574768因此,superGlobal是最慢的,但没有那么慢。我想原因是因为它是一个数组。
我从中得到的是PHP是快速的!我不会担心这些微小的时间切片之间的细微差别。拥有可读的代码要重要得多。我的经验是,在一个网站中,最慢的是数据库查询。
https://stackoverflow.com/questions/43129481
复制相似问题