Kód-optimalizálás php-ban
Kód v4 – fordított tömbkezelés
Az előbbi nekifutásban is a tömbkezelő függvényeknek ugrottunk neki, mivel ezeket tartottuk drágának, most sem lesz ez másképp. Viszont az itt bemutatott módosításhoz egy pár dolgot érdemes tisztázni:
- a variációkat tartalmazó tömbökben szöveges adatokat tárolunk
- ezeket hasonlítjuk össze
in_array()
függvénnyel - ezek a szöveges adatok tömbönként egyediek (mindegyik csak egyszer fordul elő)
- nem kell tudnunk sem az értékét, sem a helyzetét az egyező variációnak, csak azt, hogy van ilyen vagy nincs
- a php alkalmazott verziója képes asszociatív tömbök kezelésére
Támadott kódrészlet
if (! in_array($actual_variation, $variation_cache[$passengers])) { $variation_cache[$passengers][] = $actual_variation; } |
Az in_array()
működése során elindul a tömb elején, és sorra veszi az elemeket, majd elvégzi az összehasonlítást. Csak akkor nem megy végig a teljes tömbön, ha talál hamarabb egyezést, ekkor ugyanis igaz értékkel visszatér. Ha nincs egyező elem, akkor azonban végigellenőrzi a teljes tömböt, és csak ezután tér vissza hamis értékkel.
A fent említett feltételek megléte esetén azonban lehetőségünk van a tömb indexelésére, hogy ezzel is segítsük az összehasonlítást. Ehhez az asszociatív tömbfelépítést használjuk, ugyanis ennek a kulcsait indexeli a php.
Kiváltó kód
if (! isset($variation_cache[$passengers][$actual_variation])) { $variation_cache[$passengers][$actual_variation] = $actual_variation; } |
A módosítás tényleg csak annyi, hogy nem egy újabb automatikusan számozott bejegyzést teszünk a tömbbe, hanem az aktuális változat string-jét kulcsként használva mentjük el a kombinációt. Majd vizsgálatkor azt nézzük meg, hogy a megadott kulcs létezik-e már, ez pedig az indexelés miatt egy gyorsabb ellenőrzést tesz lehetővé.
A verzió erőforráshasználata:
Szöveges értelmezésben:
- 1 másodpercen belül kiszámítható: 92 fő
- 30 másodpercen belül kiszámítható: ? fő (megáll memórialimit miatt)
- 25 fő érkező vendég kiszámítása: 0.005 másodperc
- 128MB memórialimit elérése: 121 vendég számításánál
Értékelés: igazán szemrevaló.
Ez egy olyan pont, amikor már ránézéssel, olvasgatással nem igazán tudunk újabb fogást találni a kódon, hiszen minden részéből faragtunk már. Ilyen pillanatokban jönnek jól a profil-készítő eszközök.
A következő pontok esetében én az XDebug + KCachegrind párost hívtam segítségül.
MySQL jogosultság-szervezés MAC-alapú kivétel Mikrotik hotspot-ba
Comments are currently closed.