Optymalizacja kodu PHP Vol.2
Moje rady będą krótkie i zwięzłe. Co należy, a czego nie należy robić, pisząc projekt w PHP. Dotyczą one tylko PHP Proceduralnego, jako że OOP kompletnie nie znam :)
Zamiana wyrażeń regularnych na te z PERLa
Wyrażenia operujące na takich składniach jak ereg_replace() itp. są mniej wydajne od wyrażeń PERLowych. Chodzi tutaj szczególnie o preg_replace() czy preg_match().
Usuń zbędne parametry funkcji
Wielu początkujących programistów, wrzuca wiele niepotrzebnych parametrów funkcji. Przez takie działanie jej wywołanie trwa dłużej. Użyj tylko tych parametrów, które są Ci na prawdę potrzebne.
Nie używaj bezsensownych zmiennych
Spójrz na poniższy kod:
$query = mysql_query("SELECT * FROM table");
$query_rows = mysql_num_rows($query);$query2 = mysql_query("SELECT * FROM othertable");
while ($row = mysql_fetch_array($query2)) {
$a = $row[0];
$b = $row[1];
}$wysw = nl2br($a);
$wyswgood = stripslashes($wysw);echo $wyswgood;
?>
Co tu jest źle ? Można rzec, że wszystko. Jak można zrobić to bardziej optymalnie ?
$query = mysql_num_rows(mysql_query("SELECT * FROM table"));
//$query_rows = mysql_num_rows($query);
//Pamiętaj jednak, aby * zastąpić używanymi polami !$query2 = mysql_fetch_array(mysql_query("SELECT * FROM othertable"));
//while ($row = mysql_fetch_array($query2)) {
//$a = $row[0];
//$b = $row[1];
//}//$wysw = nl2br($a);
$wyswgood = stripslashes(nl2br($query2[0]));echo $wyswgood;
?>
Szybciej i optymalniej :)
Korzystaj z instrukcji switch-case zamiast if-elseif przy wielu warunkach
Istnieje pogląd, który popieram, że kod złożony z wielu elseifów lepiej zamienić na switch-case.
Witam na moim prywatnym blogu. Mam na imię Łukasz a tutaj opisuję swoje życie i nie tylko. Ponadto jestem redaktorem Ittechblog.pl, bloga związanego z IT. Serdecznie zapraszam do czytania.
jmail
11 sie, 2009
BEZEDURA!
1. wykonanie w ten sposób query do niczego się nie nadaje. Nadaje się do jednokrotnego wyświetlenia danych. I to z jednego wiersza. A jak masz więcej wierszy? :> while będzie nieodzowny, albo coś innego.
2. Załóżmy, że mamy query, które musimy wykonać w iluś miejscach na stronie robienie tego przy ciągłym użyciu mysql_query i fetch_array zje Ci zasoby bez sensu….
nie lepiej zrobić sobie funkcję do tego?
Ci co znają XNovę znają doquery, więc zrozumieją kod:
oczywiście nie ma problemu, żeby to zamienić na
i teraz mozemy do wolo operować na tej tabeli i wstawiać ją tyle razy ile chcemy na stronie.
a tutaj rzeczona funkcja fetch_array
akurat dałem przykład z PostgreSQL co nie zmienia postaci rzeczy.
teraz masz ilośc wierszy dostępną w $wynik_query_a[1];
natomiast przebig po wynikach wygląda:
for($i = 0; $i < $wynik_query_a[1]; $i ){
//dostęp do danych w zwróconym wyniku
$wynik_query_a[0][$i]['nazwa_kolumny'];
}
Prox jakbyś mógł to wstawić w jakiś fajny znacznik PHP bo nie wiem jakie masz ;)
admin
11 sie, 2009
Fakt faktem mi chodziło o to, że pierwsza funkcja nie ma wyświetlać wielu wierszy i lecieć whilem – tylko jedną rzecz tak jak jest to w przykładzie.
Chcę po prostu pokazać, że wielu noobów używa while`a bezsensownie dla wypisania jednej rzeczy. Czasem nawet wystarczy w doquery() dać ,true