Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

[Урок] switch что быстрей else if/ if

Статус
В этой теме нельзя размещать новые ответы.

Affect_Bond

Умник
Одни говорят что switch намного быстрее if /else if ,а другие наоборот говорят медленый if / else if намного быстрее switch.
Я решил проверить:
1.У нас будет с большими значениями. switch у нас будет брать значение var , а case переключать значение с 0 до 1500.
PHP:
switch ( var )
    {

        case 0..300: return 1 ;
        case 400..700: return 2 ;
        case 800..1100: return 3 ;
        case 1200..1500: return 4 ;
        default: return 1 ;
     }
     return 0;
Как вы видите мы используем вариант именно с case 0..300 (то есть там где 2 точки - там 100 и 200) думаю понятно.
Теперь код для if / else if тоже с большим значением.

PHP:
if ( var > 0 && var <= 200 ) return 1 ;
    else if ( var > 300 && var <= 500 ) return 2 ;
    else if ( var > 600 && var <= 800 ) return 3 ;
    else if ( var > 900 && var <= 1100 ) return 4 ;
    return 0;
время переключения switch: 124
время переключения Else if: 23
время переключения if: 24


Как видите тут switch намного медленнее if / else if
Меняем способ переключения на:
PHP:
case 0,100,200,300: return 1 ;
case 400,500,600,700: return 2 ;
case 800,900,1000: return 3 ;
case 1100,1200,1300: return 4 ;
default: return 1 ;
время переключения switch: 10
время переключения Else if: 24
время переключения if: 28


Как мы видим тут switch уже выигрывает.Так что прежде чем говорить что switch быстрее if / else if.
Или еще пример switch vs if

PHP:
MyFuncSwitch ( var ) {
    switch ( var ) {
        case 0..500: return 1 ;
        case 501..1000: return 2 ;
        case 1001..1500: return 3 ;
        case 1501..2000: return 4 ;
        case 2001..2500: return 5 ;
        default: return 1 ;
    }
    return false ;
}
MyFuncIf ( var ) {
    if ( var > 0 && var <= 500 ) return 1 ;
    else if ( var > 500 && var <= 1000 ) return 2 ;
    else if ( var > 1000 && var <= 1500 ) return 3 ;
    else if ( var > 1500 && var <= 2000 ) return 4 ;
    else if ( var > 2000 && var <= 2500 ) return 5;
    return false ;
}
На данном примере видно, что в функции со switch, он будет возвращать определенное число каждому из промежутка.

Switch : 19
if : 2

Ну вот и все...
Автор: Affect_Bond
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу