我经常在我的网络应用程序上使用函数sizeof($var)
,我想知道是否更好(在资源术语中)将此值存储在一个新变量中并使用此变量,或者如果它更好的调用/每次使用该功能;或者可能是无动于衷的:)
答案 0 :(得分:4)
我对这个小数组的循环方面进行了一些测试:
$myArray = array("bill", "dave", "alex", "tom", "fred", "smith", "etc", "etc", "etc");
// A)
for($i=0; $i<10000; $i++) {
echo sizeof($myArray);
}
// B)
$sizeof = sizeof($myArray);
for($i=0; $i<10000; $i++) {
echo $sizeof;
}
包含9个项目的数组:
A) took 0.0085 seconds
B) took 0.0049 seconds
包含180个项目的数组:
A) took 0.0078 seconds
B) took 0.0043 seconds
有3600个项目:
A) took 0.5-0.6 seconds
B) took 0.35-0.5 seconds
虽然没有太大区别,但你可以看到随着阵列的增长,差异变得越来越大。我认为这让我重新思考了我的观点,并说从现在开始,我将设置变量pre-loop。
Storing a PHP integer takes 68 bytes of memory.这是一个足够小的数量,我认为我宁愿担心处理时间而不是内存空间。
答案 1 :(得分:3)
通常,最好将可能重复的函数的结果赋给变量。
在您建议的示例中,此方法和替代方法(重复调用函数)生成的处理代码的差异将是微不足道的。但是,如果所涉及的函数更复杂,最好避免重复执行它。
例如:
for($i=0; $i<10000; $i++) {
echo date('Y-m-d');
}
在我的服务器上执行 0.225273 秒,同时:
$date = date('Y-m-d');
for($i=0; $i<10000; $i++) {
echo $date;
}
以 0.134742 秒执行。我知道这些片段并不完全相同,但你明白了。许多用户在数月或数年内加载了许多页面,即使这个大小的差异也很大。如果我们要使用一些复杂的功能,可能会引入严重的可扩展性问题。
不为变量赋值的主要优点是您需要少一行代码。在PHP中,我们通常可以在调用函数的同时完成赋值:
$sql = "SELECT...";
if(!$query = mysql_query($sql))...
...虽然出于可读性原因,有时会因此而不鼓励。
在我看来,为了保持一致性,将变量值赋值给变量是一种更好的方法,即使在执行简单函数时也是如此。
答案 2 :(得分:1)
如果您反复调用该函数,最好将此信息保存在变量中。这样,服务器不必继续处理答案,它只是查找它。但是,如果结果可能会改变,那么最好继续运行该功能。
答案 3 :(得分:1)
由于您分配了一个新变量,因此需要更多内存。但它可能会使您的代码更快一点。
它带来的麻烦可能很大。例如,如果您包含另一个应用相同技巧的文件,并且都将大小存储在var $sizeof
中,则可能会发生错误。奇怪的错误,当你不指望它时会发生。或者您忘记在功能中添加global $sizeof
。
你介绍了很多可能的错误,为了什么?由于速度增益可能无法衡量,我认为这不值得。
答案 4 :(得分:0)
除非你将这个功能称为百万倍,否则你的“性能提升”可以忽略不计。
答案 5 :(得分:0)
我认为这不重要。从某种意义上说,你不想一遍又一遍地执行同样的事情,但考虑到它是sizeof();
,除非它是一个巨大的数组你应该没问题。
答案 6 :(得分:0)
我认为,你应该避免像:
这样的结构for ($i = 0; $i < sizeof($array), $i += 1) {
// do stuff
}
因为,sizeof将在每次迭代时执行,即使它通常不太可能改变。
而在这样的结构中:
while(sizeof($array) > 0) {
if ($someCondition) {
$entry = array_pop($array);
}
}
你经常别无选择,只能在每次迭代时计算它。