3

一种选择通常比另一种更快吗?

选项A:$var = $_GET['param'];然后$var通过脚本引用。 选项 B:通过脚本在每次出现中
引用。 谢谢!$_GET['param']

4

6 回答 6

6

性能差异(如果有的话)将可以忽略不计并且不值得付出努力 - 以至于即使您尝试对其进行微计时,差异也会被随机因素消耗。

然而,选项 A 在创建更可持续的代码方面更好。例如,如果您希望更改 的值,$var可以从代码中的一个位置进行。

简而言之,这永远不会成为您程序的瓶颈。

于 2013-03-03T00:15:41.323 回答
2

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%。

于 2013-03-03T00:21:03.857 回答
2

这种微优化很少值得考虑。通常最好考虑如何最好地构建代码,并将这些问题留给编写语言运行时的人。

如果我们真的想找出更有效的方法,有很多相关的因素:

  • 数组访问如何执行['param']一次或多次
  • 诸如此类的超全局变量$_GET是如何实现的
  • 如何实现分配(在 PHP 中使用“写入时复制”)
  • 你如何传递$var你的代码(例如作为一个函数参数)以及是如何实现的
  • 您需要多久读取一次变量
  • 你多久写一次变量

我敢肯定还有更多;当然,您的程序和运行它的 PHP 运行时都可能在所有这些方面发生变化。

于 2013-03-03T00:28:38.767 回答
1

同意那些说您担心错误的优化级别的人。(不过,如果您真的想对这类事情着迷,请查看http://www.phpbench.com/

您的第一级优化应该是优化代码的可读性和可维护性。人类时钟周期比计算机时钟周期更有价值和昂贵(一般来说)。作为额外的奖励,您会非常惊喜地发现,人类时钟周期的优化频率也会使代码显着加快。

我强烈推荐Robert C. Martin 的Clean Code ,作为编码风格的优秀指南。

于 2013-03-03T04:07:38.610 回答
0

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 稍后会给你带来地狱,而且很难看。

于 2013-03-03T01:21:05.577 回答
-2

尽可能使用 $_GET['param']。PHP 必须记住 $_GET['param']。通过创建一个等于 $_GET['param'] 的变量,PHP 现在必须记住两个完全相同的变量。

除非您要更改新变量的值,否则只使用 $_GET['param'] 会更快。(请记住,有些人喜欢创建新变量只是为了便于阅读)

于 2013-03-03T00:18:39.503 回答