- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一种算法,其中几毫秒的差异确实很重要。我想知道下面的第一条语句比下面的第二条语句快、等于还是慢:
第一句话:
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/
我是一名优秀的程序员,十分优秀!