если еще порядок утверждений, всегда чаще всего верные утверждения в первую очередь? Насколько много улучшений производительности? - PullRequest
0 голосов
/ 24 июня 2019

У меня возник вопрос по поводу PHP / общей разницы в производительности в порядке операторов if / elseif / else. Имеет смысл сначала запускать операторы if / elseif / else в порядке наиболее часто истинного оператора для меньшего количества проверок, чтобы повысить производительность.

Теперь мой вопрос: как насчет простых операторов if / else без elseif? Имеет ли это значение, если государственные деятели, если ложь, и он переходит к другому случаю, который фактически ничего не проверяет, так как это по умолчанию? Или же к среде выполнения добавляется дополнительное время путем перехода к другому, а не внутри оператора if? И если да, то какая разница?

Edit:

@ MonkeyZeus спасибо за этот срок.

Да, это часть того, что я имею в виду. Но в случае этого:

if(x>10) {y = 10}
else {y = 0}
//or
if(x!>10) {y = 0}
else {y = 10}

имеет ли значение, если он переходит к другому, поскольку он всегда проверяет один оператор? Так, если, скажем, случай 1 случается чаще, я иду таким образом, если случай 2 происходит чаще, я иду таким же образом с кодом. Результат тот же, но в одном случае он скачет 80% времени в случае if, в другом случае он скачет 80% в другом случае.

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Как уже говорили другие, правильное сравнение - ваш лучший способ узнать с практической точки зрения.Тем не менее, в теории не должно быть никакой разницы между вашим примером (или любым другим примером), потому что среди многих оптимизаций выполнения кода одна из них - предсказание ветвления .Это гарантирует, что при достаточном количестве итераций подряд, проходящих через одну и ту же ветку if, выполнение начнет предсказывать, что дальнейшие итерации также пройдут через эту ветвь и начнут предварительно выполнять код из нее.

AsВ другом случае я не совсем уверен, но я думаю, что это похоже на предсказание кэша для каждой строки кода.

0 голосов
/ 24 июня 2019

В конце дня, вы просто спрашиваете «сравните это для меня, плз».

Итак, вы идете:

PHP 7.3.5 @ http://sandbox.onlinephpfunctions.com/

<?php
$x = 1;
$iterations = 10000000; // 10 million

$start = microtime(true);
for( $i = 0; $i < $iterations; ++$i )
{
}
echo microtime(true) - $start; // 0.071332216262817 seconds
echo PHP_EOL;

$start = microtime(true);
for( $i = 0; $i < $iterations; ++$i )
{
    if( $x < 10 ){}
}
echo microtime(true) - $start; // 0.10689616203308 seconds

Требуется примерно на 40% больше времени для работы с ненужными if(){}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...