Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Какой код быстрее обрабатывается?


Автор: Maximov 9.4.2003, 10:16
какой код обработается быстрее

одной строкой

if ((условие1)and(условие2)and(условие3)and(условие4)and(условие5))
{
}

или
вкладывать

if (условие1)
{if (условие2)
{if (условие3)
{if (условие4)
{if (условие5)
{}
}
}
}
}

Автор: Foxx 9.4.2003, 11:18
А протестировать ?
На глаз мне кажется что первый вариант... но нужно тестирование. Подробности можешь найти на http://php.spb.ru

Автор: arial 9.4.2003, 11:37
Пишем код:

1-й случай:
---------------------------

$a1=1;
$a2=2;
$a3=3;
$a4=4;
$a5=5;
$time1=microtime();
if (!empty($a1)&&!empty($a2)&&!empty($a3)&&!empty($a4)&&!empty($a5)) {
$time2=microtime();
}
$time3=($time2-$time1)*1000000;
echo $time3;

-----------------------------



2- случай:
------------------------------

$a1=1;
$a2=2;
$a3=3;
$a4=4;
$a5=5;
$time1=microtime();
if (!empty($a1)&&!empty($a2)&&!empty($a3)&&!empty($a4)&&!empty($a5)) {
$time2=microtime();
}
if (!empty($a1)) {
if (!empty($a2)) {
if (!empty($a3)) {
if (!empty($a4)) {
if (!empty($a5)) {
$time2=microtime();
}
}
}
}
}
$time3=($time2-$time1)*1000000;
echo $time3;

------------------------------------

Получили результат:

1-й случай: 86.00
2-й случай: 103.99

Комментарии излишни! cool.gif

Автор: Mark.dll 9.4.2003, 12:35
Браво! biggrin.gif

Автор: IZ@TOP 9.4.2003, 12:47
А попробуйте так :
Код


switch($var)  {
case "если так то":
{
  выполняется то что сюда вписываешь ...
  break;
}
... ну и т.д.


Автор: Foxx 9.4.2003, 15:35
не глаз а алмаз smile.gif

Автор: IZ@TOP 9.4.2003, 17:10
Цитата
не глаз а алмаз 

Ты это о чем ?

Автор: arial 9.4.2003, 19:27
Цитата(Iz @ 9.4.2003, 04:47)
А попробуйте так :
Код


switch($var)  {
case "если так то":
{
  выполняется то что сюда вписываешь ...
  break;
}
... ну и т.д.


baaa.gif

switch здесь не пойдет, потому как он проверяет только одну переменную, например:

switch ($a1) {
case 1:
first_function ();
break;
case 2:
second_function ();
break;
case 3:
third_function ();
break;
case 4:
fourth_function ();
break;
case 5:
fifth_function ();
break;
}

т.е. если переменная $a1,принимает значение 1, то выполняется first_function и т.д.
У нас же задача в другом - нам надо проверить сразу 5 переменных, и только при true выполнить некую функцию, поэтому switch здесь в пролете. cool.gif

Автор: Foxx 10.4.2003, 04:06
Цитата

Цитата

не глаз а алмаз 

Ты это о чем ?

о том что на глаз определил фавора smile.gif

Автор: IZ@TOP 10.4.2003, 08:44
Цитата
т.е. если переменная $a1,принимает значение 1, то выполняется first_function и т.д.
У нас же задача в другом - нам надо проверить сразу 5 переменных, и только при true выполнить некую функцию, поэтому switch здесь в пролете. 

Млин ... а кто разве говорил что мы проверяем не одну переменную ? Тама в начале про это не чего не писали !

Автор: arial 10.4.2003, 12:18
Цитата(Maximov @ 9.4.2003, 02:16)
какой код обработается быстрее

одной строкой

if ((условие1)and(условие2)and(условие3)and(условие4)and(условие5))
{
}
.....

Он говорил... tounge.gif

Автор: IZ@TOP 10.4.2003, 12:28
Цитата
QUOTE (Maximov @ 9.4.2003, 02:16)
какой код обработается быстрее

одной строкой

if ((условие1)and(условие2)and(условие3)and(условие4)and(условие5))
{
}
.....

Он говорил... 


Прошу прощенья ... облажался ...

А если проверять одну переменную ? то что будет быстрее (хотя ответ на жтот вопрос я знаю), мне просто интересно какой отрыв во времени ...

Автор: arial 10.4.2003, 15:24
Цитата(Iz @ 10.4.2003, 04:28)
А если проверять одну переменную ? то что будет быстрее (хотя ответ на жтот вопрос я знаю), мне просто интересно какой отрыв во времени ...

Как и в том случае пользуйся разницей microtime() до и после выполнения проверяемой функции. Так можно что угодно тестить, или время обработки документа у себя на сайте отображать. notify.gif

Автор: TiHo 10.4.2003, 15:44
Цитата
if ((условие1)and(условие2)and(условие3)and(условие4)and(условие5))
{
}


Однозначно быстрее, потому как AND исключающее условие,
если (условие1) == FALSE то остальные даже проверять не станет.

Автор: Foxx 10.4.2003, 16:18
Цитата
Однозначно быстрее, потому как AND исключающее условие,
если (условие1) == FALSE то остальные даже проверять не станет.


то же самое можно сказать и про второй вариант.
Код
if (условие1)
{if (условие2)
{if (условие3)
{}
}
}

Если не выполниться первое условие то не будут выполняться и остальные. Так что тут ты не прав.

Автор: arial 10.4.2003, 17:39
Проверяем на практике:
Код
<?
$a1=1;
$a2=2;
$a3=3;
$a4=4;
$a5=5;
/*
Делаем 100 проверок и находим среднее значение.
Для повышения точности по четному циклу запускаем первым линейный
по нечетному запускаем первым вложенный
*/
$i=1;
while ($i<=100) {
if ($i%2) {
    $time1=microtime();
    if(!empty($a1)){if(!empty($a2)){if(!empty($a3)){if(!empty($a4)){if(!empty($a5)){}}}}}
    $time2=microtime();
    $time_lin[]=($time2-$time1)*10000000;
    $time1=microtime();
    if(!empty($a1)&&!empty($a2)&&!empty($a3)&&!empty($a4)&&!empty($a5)){}
    $time2=microtime();
    $time_vloj[]=($time2-$time1)*10000000;
       } else {
    $time1=microtime();
    if(!empty($a1)&&!empty($a2)&&!empty($a3)&&!empty($a4)&&!empty($a5)){}
    $time2=microtime();
    $time_vloj[]=($time2-$time1)*10000000;
       $time1=microtime();
       if(!empty($a1)){if(!empty($a2)){if(!empty($a3)){if(!empty($a4)){if(!empty($a5)){}}}}}
       $time2=microtime();
       $time_lin[]=($time2-$time1)*10000000;
       }
   $i++;
   }
echo"Линейный: ";
echo floor(array_sum($time_lin)/count($time_lin));?><br><?
echo"Вложенный: ";
echo floor(array_sum($time_vloj)/count($time_vloj));
?>


Результат:
Если empty($a1) Линейный быстрее;
Если empty($a2) Линейный быстрее;
Если empty($a3) Линейный быстрее;
Если empty($a4) Линейный быстрее;
Если empty($a5) Линейный быстрее;
Если !empty($a1-$a5) Линейный быстрее;

adv/168.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)