+36 30 355 0880

0-24 Tudástár

Témakörök:



Új ügyfeleknek












Meglévő ügyfeleknek














Önmüködő honlap












Érdekességek











Találj meg minket a Google+-on

Domaint Tippek, Domain ötletek
Egyszerűen kitűnő. Végre egy szolgáltató aki nem csak kullog az igények előtt, hanem minőségi szolgáltatást teremt
Domain Regisztráció
Date published: 10/31/2012
5 / 5 stars

Hogyan teszteld és optimalizáld a PHP kódjaid




PHP-ban írt forráskódjaink futási idejét sokban befolyásolja a szerver sebessége, a php verziószáma és a megírt kódban felhasznált függvények felhasználási módja. Az összehasonlításban mért időegységek más-más tesztkörnyezetben eltérhetnek, de az arányok ábrázolására tökéletes és helytálló. Kezdő programozóknak nyújthat segítséget a PHP kód teljesítmény optimalizálásához. A könnyebb megértés érdekében csak a legegyszerűbb függvényeket és eljárásokat fogom bemutatni.

Ellenőrizzük, hogy egy string üres-e

KódA változó nem definiáltNullFalseÜres string"0" érték"1" értékHosszú stringÖsszes időIndex
if (!$var) 2 ms >0 ms >0 ms >0 ms >0 ms >0 ms >0 ms 4 ms 146
if (empty($var)) >0 ms >0 ms 1 ms 1 ms 1 ms >0 ms >0 ms 3 ms 100
if ($var == "") 2 ms 1 ms >0 ms 1 ms >0 ms >0 ms 42 ms 47 ms 1519
if ("" == $var) 2 ms 1 ms 1 ms 1 ms >0 ms >0 ms >0 ms 5 ms 159
if ($var === "") 2 ms >0 ms >0 ms >0 ms >0 ms >0 ms >0 ms 4 ms 117
if ("" === $var) 2 ms >0 ms >0 ms >0 ms >0 ms >0 ms >0 ms 4 ms 116
if (strcmp($var, "") == 0) 4 ms 2 ms 2 ms 1 ms 1 ms 1 ms 1 ms 13 ms 408
if (strcmp("", $var) == 0) 4 ms 2 ms 2 ms 1 ms 1 ms 1 ms 1 ms 12 ms 390
if (strlen($var) == 0) 3 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 9 ms 307
if (!strlen($var)) 3 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 9 ms 288

 

Az én következtetésem: A legtöbb esetben használd az empty() funkciót, mert így nem jön létre figyelmeztetés, amennyiben nem definiált változóra hivatkozol. Jegyezd megy, hogy az empty("0") IGAZ értékkel tér vissza. Kerüld a == használatát, mert időközönként nem megfelelő eredményt adhat (pl. a "9a" == 9 feltétel IGAZ értéket ad). Inkább használd a === operátort a == helyett és a !== operátort a != helyett, ha lehetséges. Így nem csak az értéket, hanem a típust is összehasonlítod.

 

Ellenőrizzük, hogy egy tömb üres-e

KódÜres tömb100 elemből álló tömbÖsszes időIndex
count($array) === 0 //by reference 4 ms 45 ms 49 ms 3361
count($array) === 0 //by value 3 ms 3 ms 6 ms 390
$array === array() 2 ms 2 ms 3 ms 224
empty($array) 1 ms 1 ms 2 ms 142
(bool)$array 1 ms 1 ms 1 ms 100

 

Az én következtetésem: Mi értelme az elemek megszámlálásának, ha csupán azt akarod tudni, hogy van-e a tömbben érték?

 

Két string összehasonlítása

KódAzonosakAz első karakter nem egyezikAz utolsó karakter nem egyezikÖsszes időIndex
$a == $b 1 ms 1 ms 1 ms 4 ms 132
$a === $b 1 ms 1 ms 1 ms 3 ms 100
!strcmp($a, $b) 3 ms 3 ms 3 ms 9 ms 316
strcmp($a, $b) == 0 3 ms 3 ms 3 ms 9 ms 339
strcmp($a, $b) === 0 3 ms 3 ms 3 ms 9 ms 318
strcasecmp($a, $b) === 0 9 ms 3 ms 9 ms 21 ms 765

 

Az én következtetésem: Használd azt, amelyik számodra a legkedvezőbb.

 

Ellenőrizzük, hogy egy string tartalmaz-e egy megadott szöveget

 

KódNincs találatTalálat a szöveg legelejénTalálat a szöveg közepénTalálat a szöveg legvégénÖsszes időIndex
strstr($haystack, $needle) 1 ms 1 ms 1 ms 1 ms 4 ms 105
strpos($haystack, $needle) !== false 1 ms 1 ms 1 ms 1 ms 4 ms 100
strstr($haystack, $needle) !== false 1 ms 1 ms 1 ms 1 ms 4 ms 109
stristr($haystack, $needle) 2 ms 2 ms 2 ms 2 ms 8 ms 226
preg_match("/$needle/", $haystack) 2 ms 2 ms 2 ms 2 ms 9 ms 234
preg_match("/$needle/i", $haystack) 2 ms 2 ms 2 ms 2 ms 8 ms 229
preg_match("/$needle/S", $haystack) 2 ms 2 ms 2 ms 2 ms 9 ms 233
ereg($needle, $haystack) 1 ms 2 ms 8 ms 14 ms 26 ms 708

 

Az én következtetésem: Nem számít, hogy az strstr() vagy az strpos() függvényt alkalmazod. Csak akkor használd a preg…() funkciókat, ha mindenképpen szükséged van a reguláris kifejezések erejére. Sose használd az ereg…()funkciókat.

 

Az ereg funkciót már a PHP 5.3 óta egyébként is elavult jelzőt viselnek, a PHP 7-be pedig be sem tették.

 

Ellenőrizzük, hogy egy string egy megadott szöveggel kezdődik-e

KódNincs találatTalálat a szöveg legelejénTalálat a szöveg közepénTalálat a szöveg legvégénÖsszes időIndex
strncmp($haystack, $needle, strlen($needle)) === 0 2 ms 2 ms 2 ms 2 ms 6 ms 182
strncmp($haystack, "Test", 4) === 0 1 ms 1 ms 1 ms 1 ms 4 ms 122
strncasecmp($haystack, $needle, strlen($needle)) === 0 2 ms 2 ms 2 ms 2 ms 6 ms 181
strpos($haystack, $needle) === 0 1 ms 1 ms 1 ms 1 ms 3 ms 100
substr($haystack, 0, strlen($needle)) === $needle 2 ms 2 ms 1 ms 1 ms 6 ms 180
strcmp(substr($haystack, 0, strlen($needle)), $needle) === 0 2 ms 2 ms 2 ms 2 ms 9 ms 262
preg_match("/^" . preg_quote($needle, "/") . "/", $haystack) 4 ms 4 ms 3 ms 3 ms 14 ms 417

Az én következtetésem: strpos() Nagyon gyors és szinte bármilyen esetben jól alkalmazható. strncmp() jól használható, ha meghatározott, ismert hosszúságú szövegben keresel.

 

Ellenőrizzük, hogy egy string egy megadott szöveggel végződik-e

KódNincs találatTalálat a szöveg legelejénTalálat a szöveg közepénTalálat a szöveg legvégénÖsszes időIndex
substr($haystack, strlen($haystack) - strlen($needle)) === $needle 2 ms 2 ms 2 ms 2 ms 8 ms 134
substr($haystack, -strlen($needle)) === $needle 1 ms 1 ms 1 ms 1 ms 6 ms 100
strcmp(substr($haystack, -strlen($needle)), $needle) === 0 2 ms 2 ms 2 ms 2 ms 9 ms 148
preg_match("/" . preg_quote($needle, "/") . "$/", $haystack) 4 ms 4 ms 4 ms 4 ms 16 ms 276

Az én következtetésem: A substr() használata negatív pozícióval egy jó trükk lehet számodra is.

 

 

Szöveg cseréje

KódNincs találatTalálat a szöveg legelejénTalálat a szöveg közepénTalálat a szöveg legvégénÖsszes időIndex
str_replace($search, $replace, $subject) 2 ms 2 ms 2 ms 2 ms 8 ms 100
preg_replace("/$search/", $replace, $subject) 3 ms 4 ms 4 ms 4 ms 14 ms 188
preg_replace("/$search/S", $replace, $subject) 3 ms 4 ms 4 ms 4 ms 14 ms 180
ereg_replace($search, $replace, $subject) 3 ms 5 ms 11 ms 16 ms 34 ms 446
strtr($subject, $array) 12 ms 12 ms 12 ms 12 ms 49 ms 633

Az én következtetésem: Ne használd az ereg…() funkciókat.

 

 

Karakterek levágása a szöveg elejéről és végéről

KódNincs találatTalálat a szöveg legelejénTalálat a szöveg legvégénTalálat a szöveg elején és végénÖsszes időIndex
trim($string, ",") >0 ms >0 ms >0 ms >0 ms 1 ms 100
preg_replace('/^,*|,*$/', "", $string) 7 ms 7 ms 7 ms 7 ms 26 ms 3105
preg_replace('/^,*|,*$/m', "", $string) 11 ms 11 ms 11 ms 11 ms 45 ms 5346
preg_replace('/^,+|,+$/', "", $string) >0 ms >0 ms >0 ms >0 ms 2 ms 229
preg_replace('/^,+|,+$/m', "", $string) >0 ms >0 ms >0 ms >0 ms 2 ms 225
preg_replace('/^,+/', "", preg_replace('/,+$/', "", …)) 1 ms 1 ms 1 ms 1 ms 3 ms 382

Az én következtetésem: Mindig ellenőrizd a reguláris kifejezéseidet! Ebben az esetben a .* lecseréli a semmit semmire, ami sok időt fog igénybe venni, mert egy szövegben sok "semmi" szerepel (space, whitespace, stb.).

 

 

Szöveg tömbbé darabolása

KódÜres szöveg1 egyezés eseténTöbb egyezés eseténÖsszes időIndex
explode(",", $string) 1 ms 1 ms 7 ms 9 ms 100
split(",", $string) 1 ms 1 ms 38 ms 40 ms 462
preg_split("/,/", $string) 2 ms 2 ms 12 ms 16 ms 177
preg_match_all('/[^,]+/', $string, $matches) 2 ms 4 ms 18 ms 24 ms 272

Az én következtetésem: Ne használd a split() funkciót. A PHP 5.3 óta elavult (depricated) és a PHP 7-ből eltávolították.

 

 

Szöveget tároló tömb index-szel történő bejárása

KódÖsszes időIndex
for ($i = 0; $i < count($array); $i++) //referencia szerint 37 ms 5109
for ($i = 0; $i < count($array); $i++) //érték szerint 2 ms 280
for ($i = 0, $count = count($array); $i < $count; $i++) 1 ms 133
for ($i = count($array) - 1; $i >= 0; $i--) 1 ms 128
for ($i = count($array) - 1; $i >= 0; --$i) 1 ms 155
$i = count($array); while ($i--) 1 ms 100

Az én következtetésem: A count() elképesztően lassítja a futtatást. Amennyiben lehetséges, előre számold ki a tömb hosszát.

 

Tömb elemeinek kinyerése

KódÖsszes időIndex
$array[0] 32 ms 100
$array['key'] 33 ms 102

Továbbra is használj nyugodtan asszociatív tömböket.

 

Tömb összeillesztése

KódÖsszes időIndex
implode(" ", $array) 5 ms 110
"$array[0] $array[1] $array[2]" 5 ms 100
$array[0] . " " . $array[1] . " " . $array[2] 5 ms 109
sprintf("%s %s %s", $array[0], $array[1], $array[2]) 11 ms 215
vsprintf("%s %s %s", $array) 12 ms 242

Az én következtetésem: A szövegek konkatenációja olcsó művelet a PHP-ban. Ne vesztegesd az idődet ennek a tesztelésével.

 

Egyszeres vagy kétszeres idézőjel kérdése

KódÖsszes időIndex
'nem tartalmaz dollár jelet' 1 ms 101
"nem tartalmaz dollár jelet" 1 ms 100
'$változók $nem $lesznek $cserélve' 1 ms 101
"\$változók \$nem \$lesznek \$cserélve " 1 ms 104
"$változók $cserélve $lesznek" 8 ms 1260
$változók . ' ' . $cserélve . ' ' . $lesznek 8 ms 1351
$változók . " " . $cserélve . " " . $lesznek 9 ms 1405

Az én következtetésem: Nem különösebben számít, hogy sima vagy dupla idézőjelet használsz. A változók értelmezését azonban befolyásolja az idézőjel típusa.

Ha esetleg szeretnél még jobban elmélyülni a PHP programozás rejtelmeiben, illetve a gazdaságosabban futtatható kódok írásmódjában, akkor a webmester blogon sok hasznos cikk fog neked segítséget nyújtani hozzá.

Ha találtál valami hasznosat a cikkben, nyomj egy tetszik gombot:

mennyire vagy ügyes domaines?

Kérlek írj egy köszönömöt, ha tetszett!

Csatlakozz a beszélgetéshez!

Mi ez, hova kerültem?

A domainflotta.hu honlap tudásbázisát nézed éppen. Rengeteg leírást és szoftveres segítséget adunk, amivel megnövelheted a forgalmad. Vagy épp megvalósíthatod az ötleted.




domain tárhely regisztráció



Ezeket már olvastad?



A hely biztonsági tanúsítványa lejárt vagy A webhely tanúsítványa hibás.

Ez a "hibaüzenetet" a böngészõd írja ki, amikor megpróbálsz belépni a webes leve...

Megnézte: 15195 ember
Hogyan tudom rendezni az anyagiakat?

A rendelés díjának befizetésérõl:A rendelésed rögzítésekor küldünk e-mailben egy prof...

Megnézte: 14868 ember
Mennyi idõ alatt készül el a .hu domain nevem?

A leggyakoribb eset Az új domain szabályzat szerint 4 munkanap alatt elbírálják a doma...

Megnézte: 14353 ember
Hogyan tudom elolvasni a leveleimet?

  Böngészõ segítségével Hogyan? A következõ webcímre látogass el e...

Megnézte: 14221 ember
Regisztráció tematikus katalógusokba

Linkgyûjtemény | Tematikus Linkek | Link regisztrációA linkgyûjteményekbe és te...

Megnézte: 11987 ember
Mysql optimalizálás és honlap gyorsítás

Ebben a cikkben fõleg technikai információkat fogunk megosztani arról, hogy a mysql lekérése...

Megnézte: 11582 ember
Mutathat-e egy tárhelyre több domain?

 Válasz: Igen Az osztott tárhelyeinkrõl a több honlap egy tárhelyen menüpontban olvasha...

Megnézte: 10529 ember
301 redirect átirányítás

A 301 redirect egy olyan átirányítási forma, amivel a bot-nak megmondhatjuk, hogy az adott...

Megnézte: 9938 ember
Hogyan tudom beállítani e-mail postafiókomat Thunderbird környezetben?

Szöveges leírás Fájl menü → Új → Postafiok Postafiók: Levelezõ postafió...

Megnézte: 9138 ember
Mit jelent a Google Barát Tárhelyek kifejezés?

Mi Az a Google Barát Tárhely? Tudni akarod mi a különbség 2 tökéletesen optimalizált honl...

Megnézte: 9038 ember