gpt4 book ai didi

php - 将括号留在 PHP if else 结构中会提高速度吗?

转载 作者:行者123 更新时间:2023-12-02 06:18:10 24 4
gpt4 key购买 nike

我正在编写一种算法,其中几毫秒的差异确实很重要。我想知道下面的第一条语句比下面的第二条语句快、等于还是慢:

第一句话:

if( true )
{
return true;
}

第二个声明:

if( true )
return true;

有人可能也知道有关速度改进的类(class)吗?

最佳答案

TL;DR 没有方括号可能会更快,充其量是每个周期纳秒级,但在不引入错误和复杂性方面这是一个糟糕的想法在路上。


作为一个很好的引用,看看http://www.phpbench.com/ .当且仅当您已经实现并测试这些调整中的每一个时,您才应该担心这种事情可能会节省纳秒级的时间。

您应该认真考虑实现 OpCache ,还有,在沉迷于这种事情之前。 OpCache 将预编译的字节码存放在内存中。仅当编译器尚未在 OpCache 上下文中对其进行优化时,方括号或无方括号调整才相关。

此外,正如@Abhineet 所说,如果省略括号,您的代码将很快变得难以理解。

只是因为:这是一个答案。我的基准代码:

// Counting to 10,000,000, without brackets
$i=0;
$start = microtime(true);
while($i < 10000000) {
if(true)
$i++;
}
echo "<br>".( (int)((microtime(true) - $start)*1000) )." ms<br/>";

// Counting to 10,000,000, with brackets
$i=0;
$start = microtime(true);
while($i < 10000000) {
if(true) {
$i++;
}
}
echo "<br>".( (int)((microtime(true) - $start)*1000) )." ms<br/>";

在运行 Windows 7、Apache/2.2.21 和 PHP/5.3.9 的戴尔笔记本电脑上,无括号版本耗时 2081 毫秒,带括号版本耗时 2765 毫秒。为了验证,我运行了几次,每次都得到非常接近这些数字的结果。我还切换了测试顺序并获得了可比较的结果。但是当我在另一个运行 PHP 5.3.3 的系统上运行它时,情况正好相反——括号始终更快。如果您非常关心这一点,您将不得不在特定机器、PHP 版本和您打算在生产中使用的配置上对您的代码进行广泛的基准测试。

因此,归根结底,您可能1000 万次迭代 可以节省大约 0.7 秒。随心所欲地做...

更新的基准

我再次偶然发现了这个答案,发现 (1) 它已有 3.5 年历史,并且 (2) 我的基准测试是在 PHP 5.3 (!) 中进行的。所以,我决定更新它们。在 PHP 7+ 中,这种微优化更没有意义。几个基准:

在 PHP 7.0.0 中,差异小于 4%,不带括号的 1000 万次迭代的数字约为 355 毫秒,而带括号的为 368 毫秒。每 1000 万次迭代有 0.013 秒的差异。

在 PHP 7.1.5 中,它更荒谬。对于 1 亿 次迭代,我得到的数字是 1326 毫秒,而不是 1331 毫秒。缓存预热后,差异通常小于 2 毫秒,通常为 0 毫秒。换句话说,在当前版本的 PHP 中,省略括号最多可为每个 if 语句节省大约 0.00000000002 秒。在我看来,这远远不足以证明引入错误和使代码更难阅读的风险是合理的。

关于php - 将括号留在 PHP if else 结构中会提高速度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20464930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com