ugrás a tartalomhoz

Php függvény szerver teljesítmény

react · 2012. Jan. 10. (K), 00.30
Szerintetek mennyiben jobb, ha a következő függvényben az sql lekérdezés eredményét a cím szerint átadott paraméterbe töltöm, mint ha return-el küldeném vissza az eredményt? Nagyobb adatmennyiségnél (gondoljunk pl nagy TEXT típusú mezőkre) jelentős memóriamennyiséget foglalhat el egy komolyabb lekérdezés eredménye, főleg ha nagyon sok sor is van. Emellett egyetlen lapletöltésnél sok sql lekérdezés is lefuthat. Nem cím szerinti átadásnál egyszer létrejön ez az adat a függvényen belül egy változóban, majd létrejön a visszaadott változóban (pl $x = sql("SELECT * FROM a") fgv-en belül és utána $x-ben is, míg cím szerinti átadás esetén, ahogy a példában van csak egyszer kerül betöltésre a megadott változóba). Véleményetek szerint van ennek érdemleges hatása, vagy egyszerűbb lenne a minimálisan jobb kezelhetőség kedvéért simán return-el visszaadni az értéket? A függvény lényege, hogy roppant egyszerű módon egyetlen php sorban feltölthetjük pl egy select option elemeit közvetlenül az adatbázisból, de bármilyen egyéb lekérdezés is gyorsan és egyszerűen elvégezhető vele (validálást stb nem végez).

function sql($sql,&$data,$id="", $no_array_value = "")
{
    $data = array();
    $result = mysql_query($sql);
    if (mysql_num_rows($result)) {
	    while($row=mysql_fetch_assoc($result)) {
	    	if ($id == "") {
	    		if ($no_array_value)
	    			$data[] = $row[$no_array_value];
	    		else
					$data[] = $row;
			}
			else {
				if ($no_array_value)
					$data[$row[$id]] = $row[$no_array_value];
				else
					$data[$row[$id]] = $row;
			}
	    }
    }
}
 
1

Attól függ, mire használod

Pepita · 2012. Jan. 10. (K), 09.17
- Ha nagy adatmennyiséged van (nagy TEXT típusú mezők) akkor memória és gyorsaság szempontjából az a legjobb megoldás, ha a $result-ot adod vissza, és ott szedegeted ki (soronként) az adatot, ahol feldolgozod/kiírod. Tudom, ez kissé ellent mond az MVC-elvnek, de sok memóriát és plussz műveletet spórolhatsz vele.
- Ha kisebb adatmennyiségről van szó (gondolom a select option ide tartozik), akkor címszerinti és a "sima return" is szóbajöhet, nem hiszem, hogy számottevő időkülönbség lenne a kettő közt. Memóriából a "sima" tényleg dupla, de csak "egy pillanatig", mert mihelyt bekerült a változódba, a fv. által foglalt mem. felszabadul.
- Én a fenti két esetet külön fv-ekkel oldanám meg, nyilván te sem akarod a nagy texteket select-be tenni, így megkülönböztethető a kettő.