问题描述
|
我经常在Web应用程序上使用函数
sizeof($var)
,我想知道(在资源方面)更好的方法是将该值存储在一个新变量中并使用该变量,或者更好地调用/使用每个变量该功能的时间;或冷漠:)解决方法
我对这个小数组的循环方面进行了一些测试:
$myArray = array(\"bill\",\"dave\",\"alex\",\"tom\",\"fred\",\"smith\",\"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。
存储一个PHP整数需要68个字节的内存。这是一个很小的数量,我想我宁愿担心处理时间而不是内存空间。,通常,最好将可能重复的函数的结果分配给变量。
在您建议的示例中,这种方法和替代方法(反复调用该函数)所产生的代码处理之间的差异是微不足道的。但是,如果所讨论的函数较为复杂,则最好避免重复执行它。
例如:
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))...
...虽然出于可读性原因有时不建议这样做。
在我看来,即使是执行简单的函数,为了保持一致性,将返回值分配给变量也是更好的方法。,如果要一遍又一遍地调用该函数,则最好将此信息保留在变量中。这样,服务器不必继续处理答案,只需查找即可。但是,如果结果可能会改变,则最好继续运行该功能。,由于您分配了新变量,因此将占用一点点内存。但这可能会使您的代码更快一点。
它带来的麻烦可能很大。例如,如果包含另一个应用相同技巧的文件,并且都将大小存储在var$sizeof
中,则可能会发生不良情况。奇怪的错误,在您不期望的时候发生。或者您忘记在函数中添加“ 9”。
您介绍了许多可能的错误,原因是什么?由于速度增益可能无法测量,因此我认为这是不值得的。,除非您将此功能调用一百万次,否则您的“性能提升”可以忽略不计。,我不认为这真的很重要。从某种意义上说,您不想一次又一次地执行相同的事情,但是考虑到它是is10ѭ,除非它是一个巨大的数组,否则您应该都可以。,我认为,您应避免使用类似以下的构造:
for ($i = 0; $i < sizeof($array),$i += 1) {
// do stuff
}
因为,sizeof将在每次迭代中执行,即使它通常不太可能更改。
而在这样的构造中:
while(sizeof($array) > 0) {
if ($someCondition) {
$entry = array_pop($array);
}
}
您通常别无选择,只能在每次迭代中进行计算。