Haladó programozók már figyelnek arra is, hogy a kódjuk milyen hamar fut le és mennyi erőforrást vesz igénybe. Látogatott oldalak esetében fontos, hogy a kód hamar lefusson és kevés erőforrást használjon, így több látogatót tudjon kiszolgálni. Az itt felsorolt tippek egyszerűen betarthatóak és hosszú kód esetén már elég sokat le tudnak faragni a futásidőből:
- Ha egy osztály lehet statikus is, akkor használd deklaráld mint
static class; körülbelül négyszer lesz gyorsabb. - Az
echosokkal gyorsabb mint aprint. - Csökkentheted a memóriahasználatot, azzal, hogy több paramétert adsz meg az
echo-nak, ahelyett hogy összeragaszd a stringeket:
echo '<title>', $oldal['cim'], '</title>'; - Használd az
unset()függvényt, hogy szabadíts fel memóriát. Főleg ha hosszú stringekkel vagy nagy tömbökkel dolgoztál, és már nincs rájuk szükséged. - Tartsd magad távol a
__get(),__set(),__autoload()meg hasonló megoldásoktól. - A
require_once()sok erőforrást igényel. Ne használd. - Ahol csak lehet használj teljes útvonalakat a fájlokhoz, így nem kell felesleges időt eltöltenie a fordítónak rendszerhívásokkal, hogy megtalálja a teljes útvonalat.
- Ha meg szeretnéd tudni a kódod mikor kezdte a futását akkor használd a
$_SERVER['REQUEST_TIME']változót, ahelyett hogy újat hozz létre a kódod elején. - A reguláris kifejezésekkel sok mindent meg lehet oldani, viszont nagyon lassúak. Próbáld meg először megoldani a problémád a
strncasecmp(),strpbrk()vagystripos()függvényekkel. - A
str_replace()sokkal gyorsabb mint apreg_replace(), astrtr()viszont négyszer gyorsabb astr_replace()függvénynél. - Ha egy függvény, mint például a
str_replace(), elfogad tömböt és stringet is paraméterként, a te listád viszont nem nagy és nem változó, akkor inkább többször hívd meg a függvényt, minthogy egy tömböt adj át neki. - Jobb ha
switch-et használsz sokif/elsehelyett. - A hibaüzenetek elhallgattatására használt
@nagyon lassú. - A hibaüzenetek sok erőforrást igényelnek; óvakodj tőlük.
- Kapcsold be az Apache
mod_deflatemodulját. Akár 80%-al is összetömörítheti az oldalad, így kevesebb lesz az adatforgalmad. - Zárd be az adatbázisaid kapcsolatait miután már nem használod őket vagy a kód végén.
- Ne használj függvényeket a
for()ciklusaidban!
for($i = 0; $i <= count($tomb); $i++) // A count() meg lesz hívva minden egyes ciklusban! - Az
$adatok['ar']hétszer gyorsabb, mint az$adatok[ar]. - A globális változók kétszer gyorsabbak, mint a helyi változók.
- A leggyorsabb a helyi változó növelése. Majdnem olyan, mint egy helyi változóval dolgozni egy függvényben.
- Egy objektum változójának növelése a leglassúbb. Például a
$this->valtozo++;háromszor lassúbb mint egy helyi változó növelése. - Egy nem deklarált változó növelése tízszer lassúbb, mint egy deklarálté.
- A jelenlegi osztályban található függvények hamarabb lefutnak, mint a szülő osztályban található függvények.
- Egy üres függvény egy paraméterrel körülbelül annyi futásidőt használ, mint nyolcszor egy helyi változó növelése.
- Ha a stringjeid ' közé rakod " helyett, akkor sokkal gyorsabban fognak lefutni, mivel a "-ben a PHP keres változókat is, míg '-ban nem.
- Egy PHP fájl 2-10x lassabban lesz kiszolgálva az Apache által, és több erőforrást is igényel, mivel lefut a PHP compiler is. Ha a fájl nem tartalmaz PHP kódot, akkor statikus fájlként tárold.
- A PHP kódjaid minden egyes futásnál le lesznek fordítva és csak utána futtatva. Sok időt és erőforrást takaríthatsz meg, ha telepítsz egy olyan modult amely cache-elni a lefordított kódot, így nem kell minden futásnál újrafordítani. Ilyen például az APC.
- Cache-elj minél többet. Ahelyett, hogy minden egyes kis adatért kérést küldj az adatbázisodnak (pl MySQL), használj inkább memached-et.
- Mikor biztos kell légy benne, hogy egy stringnek megvan egy bizonyos hosszúsága, akkor normális esetben meghívod rá a
strlen()függvényt. Habár astrlen()egyáltalán nem egy terhelő függvény, mégis egy függvény, és lassú a meghívása a következő trükkhöz képest:
Azif(!isset($nev{5})) die('A név rövidebb öt karakternél.');isset()nem egy függvény, hanem egy nyelvi konstrukció, így sokkal gyorsabb a meghívása. - Ha egy változó értékét növeled vagy csökkented, az
$i++lassúbb mint, a++$i. Ez az érdekesség csak a PHP nyelvben van jelen. Az$i++meghívásakor a fordító készít egy átmeneti másolatot, megnöveli, majd ezt visszamásolja az eredeti változóba; a++$iviszont már egyből a kért változó értékét növeli. - Nem kell mindent OOP-ban megírj. Sok memóriát használ.
- Nem kell mindenféle adatnak saját osztályt írj, majd ebben tárold; így nagyon sok memóriát pazarolsz el. Ilyen célra vannak a tömbök.
- Ha olyan függvényekkel dolgozol, amelyek nagyon sok erőforrást és időt használnak, próbáld meg őket átírni C nyelvre és töltsd be mint PHP kiterjesztést.
- Használj egy code profilert, mert ezek megmutatják a kódod melyik része a lassú. Ilyen például az xDebug.
Ha még tudsz más trükköt is, akkor írd meg egy hozzászólásban!