一种选择通常比另一种更快吗?
选项A:$var = $_GET['param'];
然后$var
通过脚本引用。
选项 B:通过脚本在每次出现中
引用。
谢谢!$_GET['param']
6 回答
性能差异(如果有的话)将可以忽略不计并且不值得付出努力 - 以至于即使您尝试对其进行微计时,差异也会被随机因素消耗。
然而,选项 A 在创建更可持续的代码方面更好。例如,如果您希望更改 的值,$var
可以从代码中的一个位置进行。
简而言之,这永远不会成为您程序的瓶颈。
10000000
以循环为基准
$var = "bleh";
for ($i=0; $i<10000000; $i++) {
strlen($var);
}
和
$array = array();
$array['blah'] = "bleh";
for ($i=0; $i<10000000; $i++) {
strlen($array['blah']);
}
结果:
- Var:8.563s - 856.3 纳秒/循环
- 阵列:每个循环 8.699s - 869.9 纳秒
速度差异 1.6%。
这种微优化很少值得考虑。通常最好考虑如何最好地构建代码,并将这些问题留给编写语言运行时的人。
如果我们真的想找出更有效的方法,有很多相关的因素:
- 数组访问如何执行
['param']
一次或多次 - 诸如此类的超全局变量
$_GET
是如何实现的 - 如何实现分配(在 PHP 中使用“写入时复制”)
- 你如何传递
$var
你的代码(例如作为一个函数参数)以及它是如何实现的 - 您需要多久读取一次变量
- 你多久写一次变量
我敢肯定还有更多;当然,您的程序和运行它的 PHP 运行时都可能在所有这些方面发生变化。
同意那些说您担心错误的优化级别的人。(不过,如果您真的想对这类事情着迷,请查看http://www.phpbench.com/)
您的第一级优化应该是优化代码的可读性和可维护性。人类时钟周期比计算机时钟周期更有价值和昂贵(一般来说)。作为额外的奖励,您会非常惊喜地发现,人类时钟周期的优化频率也会使代码显着加快。
我强烈推荐Robert C. Martin 的Clean Code ,作为编码风格的优秀指南。
A:
$var = $_GET['param']; // and then referencing $var through the script.
需要一个恒定的时间,在计算机科学中等于零。
B:参考
$_GET['param']; // in each occurrence through the script.
是一种丑陋的方法,只能由“草率”的程序员完成。
假设您必须$_GET['param']
在单个页面或多个页面中使用 10 次,然后您决定要将 'param' 更改为 'p' 或 'parameter',那么你就不走运了。
您想将“幻数”和“幻值”初始化为变量(或常量),您可以稍后对其进行编辑,而程序员(无论是您的还是其他人)不必确切知道它是什么.
想象一下,如果程序员会使用
if($number == 3.1415)
代替
if($number == $pi)
它归结为类似的基础。
所以,不,理论上这两个选项通常都不是更快,但选项 B 稍后会给你带来地狱,而且很难看。
尽可能使用 $_GET['param']。PHP 必须记住 $_GET['param']。通过创建一个等于 $_GET['param'] 的变量,PHP 现在必须记住两个完全相同的变量。
除非您要更改新变量的值,否则只使用 $_GET['param'] 会更快。(请记住,有些人喜欢创建新变量只是为了便于阅读)