Prox: Myśli odleglejsze niż Proxima Centauri

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.

  • 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:

    $wynik_query_q = doquery(„Tutaj zapytanie”);
    $wynik_query_a = fetch_array($wynik_query_q);

    oczywiście nie ma problemu, żeby to zamienić na

    $wynik_query_a = fetch_array(doquery(„Tutaj zapytanie”));

    i teraz mozemy do wolo operować na tej tabeli i wstawiać ją tyle razy ile chcemy na stronie.

    a tutaj rzeczona funkcja fetch_array

    function fetch_array($wynik){
    $zwrotka = ”;
    $wiersz = 0;
    while($zwrotka[$wiersz] = pg_fetch_array($wynik)){
    $wiersz ;
    }
    $oddaj[0] = $zwrotka;
    $oddaj[1] = $wiersz;
    return $oddaj;
    }

    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 ;)

  • 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

Śledź rozwój dyskusji dzięki kanałom RSS 2.0