PHP kód optimalizálás
Sziasztok.
Rákerestem a neten erre a témára, de nem nagyon találtam "összesítő" leírást.
Van egy nagyobb rendszerem, és kicsit gyorsítani akarok a futásán. Amit eddig találtam az az, hogy a modulokat az ember olyan csoportokba gyüjtse, melyeket működnek úgy is, ha magukban egyedül includolják. Merthogy a sok include sajnos lassít.
Ezt meg is teszem.
Azonban lenne még egy kérdésem:
Jelenleg az sql lekérdezések nálam egy funkción keresztül futnak. Minden lekérdezés elött felépítem a kapcsolatot, és a végén lezárom a kapcsolatot.
De ugye 1 oldal megjelenítésénel lehet akár 10 lekérdezés is (vagy több).
Kérdésem: lehetséges, hogy a rendszert úgy kellene felépítenem, hogy a kód futása elött megnyitom a kapcsolatot, majd a legvégén zárom le csak?
Lenne ebből látható gyorsulás?
Előre is köszönöm a segítséget.
ui: bármilyen"gyoirsításra" vonatkozó tanácsot szívesen veszek!
■ Rákerestem a neten erre a témára, de nem nagyon találtam "összesítő" leírást.
Van egy nagyobb rendszerem, és kicsit gyorsítani akarok a futásán. Amit eddig találtam az az, hogy a modulokat az ember olyan csoportokba gyüjtse, melyeket működnek úgy is, ha magukban egyedül includolják. Merthogy a sok include sajnos lassít.
Ezt meg is teszem.
Azonban lenne még egy kérdésem:
Jelenleg az sql lekérdezések nálam egy funkción keresztül futnak. Minden lekérdezés elött felépítem a kapcsolatot, és a végén lezárom a kapcsolatot.
De ugye 1 oldal megjelenítésénel lehet akár 10 lekérdezés is (vagy több).
Kérdésem: lehetséges, hogy a rendszert úgy kellene felépítenem, hogy a kód futása elött megnyitom a kapcsolatot, majd a legvégén zárom le csak?
Lenne ebből látható gyorsulás?
Előre is köszönöm a segítséget.
ui: bármilyen"gyoirsításra" vonatkozó tanácsot szívesen veszek!
Overkill
A mai gépeknél már akár több száz kapcsolat is lehet nyitva egyszerre, nem probléma. A kapcsolódás viszont konstans idővel jár, mert jelszót kell ellenőrizni, stb. Ergo érdemesebb az egy kapcsolat módszerét választani.
Ami az optimalizálást illeti, emberi erőforrásra optimalizálj első sorban. Ha mondjuk 0.1 másodperc helyett 0.3 másodperc alatt fut le a kód, viszont ettől 50%-kal hatékonyabb leszel, akkor ne gondolkozz. Egy új vas töredékrészébe kerül a fejlesztői munkaerőnek. (Nyilván nem lehet hogy 10 másodperc alatt fut le a kód, de nem kell ész nélkül optimalizálni.)
Köszi!
Egyébként azért áltam át az alkalmankénti kapcsolat nyitásra, mert tapasztaltam néha furcsa hibaüzenetet.
A következő történt: Felépítettem a mysql kapcsolatot, és nem zártam mondván: a kód lefutása után magától zár.
De megtörtént olyan, hogy mondjuk 100 esetból egyszer hibaüzenetet írt ki: nem tud kapcsolodni az adtbázishoz. frissítettél és jó volt. aztán 100 oldaletöltésig semmi, majd megint 1x...
Én ezt annak tudtam be, hogy talán a háttérben fut még a kód, nem zárta a kapcsolatot, és "összeakadt". persze lehet, hogy ez hülyeség. Így aztán átáltam arra, hogy mindig zárom, aztán ha megint kell sql, akkor nyitom.
szerk.: Najó, ha nagyon tényszerű akarok lenni: fogalmam nem volt miért írja ki, így valamire megpróbáltam ráfogni :D
Kapcsolatok
Millió oka lehet, érdemes loggoltatni a mysql hibákat és a queryket aztán majd kiderül.
Pár optimalizálási tipp
Általában érdemes arra gondolni, hogy mi az a minimális szükséglet, amit épp használsz.
Én azt szoktam csinálni, hogy a rendszerbe afféle checkpointokat építek, ezek rögzítése (pl. sessionbe) egyetlen központi változóval kapcsolható. DB connect, core init, modulok indítása, modulok fontosabb lépései, lezárások, template-ek feldolgozása, kimenet, stb. Fejlesztésnél időnként átkapcsolom az egész rendszert ilyen "diagnosztikus módba", és minden oldallekérés után kapok egy mikroszekundumos időkkel, valamint futási paraméterekkel jellemzett listát. Döbbenetes élmény volt, mikor először láttam magam előtt a rendszer minden porcikájának működését ms-ra lebontva... komplexebb cuccnál ráadásul így redundás működésekre, a kelleténél többször járatott utakra is egy pillanat alatt fény derül.
Szóval az ultimate tanács: gondolkodj elegáns kódban! :) Egy idő után úgyis ösztönössé válnak az apró trükkök... pont ezért hirtelen "csak" a fentiek jutottak eszembe. :)
Debugger
inkább profiler
Üdv,
Felhő
profiling
Include téma: nem egyértelmű amit írsz. Ha nincsen opcode cache a rendszerben, akkor pont a lazy loading, amivel spórolni tudsz (tehát csak akkor töltöd be a fálokat, amikor ténzlegesen szükség van rájuk). Ha van opcode cahce, akkor már érdemes azt csinálnod, hogy a gyakran használt fájlokat beteszed egy fájlba, és azt include-olod. Persze opcode cache nélkül is igaz az, hogy ha több fájl tartalmára mindig együtt van szükséged, akkor érdemes őket egy fájlban tárolni. (Megteheted azt is, hogy csinálsz egy build fájlt, ami deploy előtt elkészíti ezeket a gyűjtő fájlokat).
Kapcsolódás: ez így biztosan elég rossz megoldás. Kapcsolódj az első parancs kiadásakor, majd az utolsónál bezárhatod.
Üdv,
Felhő
Huha!
Megnézem azokat a dolgokat amiket nem tudok, és átnézem amit ajánlottatok.
Köszönöm szépen.
Sokat segítettetek!
Nekem az a gondom, hogy nem
???
Attól még aktuális lehet. Az
Az ilyen profiler cuccról volt szó, ami segítht optimalizálni. Na itt olyanokat ajánlottak, amit csak ssh-án keresztül lehet telepíteni és használni.
Minek nyissak új témát, ha erősen kötödik az én problémám is a témához? Itt merültek fel a dolgok, így magától értetődő volt, hogy ide írjak.
Saját gépen