[Výsledek testu] Rychlost IF ELSE vs SWITCH – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

[Výsledek testu] Rychlost IF ELSE vs SWITCH – PHP – Fórum – Programujte.com[Výsledek testu] Rychlost IF ELSE vs SWITCH – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Curo
~ Šéfredaktor
+8
Hero
10. 1. 2012   #1
-
+2
-
Zajímavé

Test proveden vždy 50 000× a probíhal kvůli zjištění, zdali je optimálnější použít na rozvětvování akcí (např. nad indexem) IF ELSE nebo SWITCH. Htaccess převádí veškeré požadavky do indexu, ten nejprve zpracuje předanou URL a poté větví akce.

1) if else, 19× + f-ce porovnávající zač. řetězce (z předané URL)
=====================================
první podmínka: 0.2172 s
poslední podmínka: 2.0300 s
neexistující podmínka: 2.2804 s (poslední else)
HP: 0.0076 s

2) switch, 19× case, 1× preg_match (na předávanou URL)
=====================================
první podmínka: 0.2644 s
poslední podmínka: 0.2701 s
neexistující: 0.2710 s (např. výpis profilu, větev default)
HP: 0.2088 s

3) switch, 19× case, 1× preg_match pouze pokud neni HP (optimalizace) =====================================
první podmínka: 0.2643 s
poslední podmínka: 0.2726 s
neexistující: 0.2779 s (např. výpis profilu, větev default)
HP: 0.0077 s

Nejoptimálnější je tedy v indexu vzít URL, pokud to je HP (tedy URL bez parametrů), přejít na ni, pokud ne, zpracovat URL regulárem a pak větvit pomocí SWITCH.

Poslední podmínka je tak o celý řád efektivnější (rychlejší) v případě SWITCH, než za použití IF ELSE.

U obou, SWITCH i IF ELSE platí, že co se používá nejčastěji (HP [hlavní stránka], články...), to dát ve větvení nahoru.

Jen tak pro zajímavost :-).

Nahlásit jako SPAM
IP: 109.164.4.–
Guitar Hero Master, Project führer & zdejší čaroděj.
Sleduj mě na twitteru – @lukaschury.
KIIV
~ Moderátor
+43
God of flame
10. 1. 2012   #2
-
+1
-
Zajímavé

Jak priblizne vypada kod?

A jak by bylo rychle pouzit misto switche napriklad asociativni pole + "reference" na funkce (ci pole objektu, kde zavolat presne dannou metodu) + test, jestli existuje hodnota?

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
zlz
~ Anonymní uživatel
634 příspěvků
10. 1. 2012   #3
-
0
-

Doporučuji zdroják nedodávat a vlákno smazat  

Nahlásit jako SPAM
IP: 213.211.51.–
liborb
~ Redaktor
+18
Guru
10. 1. 2012   #4
-
0
-

To ti fakt vyšel switch jako rychlejší?

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.208.–
Curo
~ Šéfredaktor
+8
Hero
11. 1. 2012   #5
-
0
-

#4 liborb
Tak sám to vidíš :-), testy probíhali několikrát.

#2 KIIV
Kód neměl žádné zvláštnosti, postaven byl nad reálným projektem, kde jsme měnili větvení.
Na další testování už nezbývá čas, bylo to spíše pro zajímavost, když jsme se bavili, co je rychlejší.

Nejpomalejší tedy vyšel IF ELSE, kdy se čeká, než dojde na nižší pozice.

Nahlásit jako SPAM
IP: 109.164.4.–
Guitar Hero Master, Project führer & zdejší čaroděj.
Sleduj mě na twitteru – @lukaschury.
zlz
~ Anonymní uživatel
634 příspěvků
11. 1. 2012   #6
-
0
-

Na rychlejším switchi není nic zajímavého. Divné je, že je o TOLIK rychlejší. Ty ify musely mít logiku nesrovnatelnou se switchem, protože if/switch sám o sobě takový rozdíl prostě neudělá.

Nahlásit jako SPAM
IP: 213.211.51.–
Curo
~ Šéfredaktor
+8
Hero
11. 1. 2012   #7
-
0
-

#6 zlz
Je to 50 000x spuštěno, proto je rozdíl tak markantní.
Pro někoho výsledek být zajímavý může.

Nahlásit jako SPAM
IP: 109.164.4.–
Guitar Hero Master, Project führer & zdejší čaroděj.
Sleduj mě na twitteru – @lukaschury.
liborb
~ Redaktor
+18
Guru
11. 1. 2012   #8
-
0
-

Na rychlejším switch je zajímavé to, že podle statistik, které jsem si sám sfalšoval, je switch o něco málo pomalejší.
Ten vyrovnaný výsledek pro všechny větve switch spíš ukazuje na nějakou optimalizaci ve smyslu zmínky KIIVa. Větší rychlost první podmínky if proti switch ukazuje na to, že tam má switch "něco navíc".

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.210.–
zlz
~ Anonymní uživatel
634 příspěvků
11. 1. 2012   #9
-
0
-

#7 Curo
O to právě jde, 50 000 je málo. Teď jsem zkusil 50 000 000 a... nic.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý