Bordeux.NET

Optymalizacja

Często, gdy nasza strona osiągnie już sukces w internecie, musimy postarać się o szybsze ładowanie naszej strony, zmniejszenie obciążenia serwera oraz łącza. Gdy tego nie zrobimy, duża część użytkowników naszego serwisu może odejść, czego zapewnię nie chcemy. Pokaże wam parę trików o obowiązkowych nawyków. Więc zaczynajmy.

1. SQL

Podstawą jest dobrze stworzona struktura bazy danych. Do odpowiednich pól, wyznacz ich typ. Dla daty ustaw typ danych "DATE", dla liczb typ "INT", a dla słów, które mają poniżej 250 znaków użyj typu "VARCHAR" itd.

  1. Nie używaj operatora NOT IN – być może składnia jest nieco mniej intuicyjna, aczkolwiek zdecydowanie wydajniejsza jest klauzula NOT EXISTS.
  2. Unikaj zapytań z użyciem DISTINCT. Lepiej i wydajniej jest użyć GROUP BY.
  3. Nie używaj operatorów nierówności: "<>", "=!". O wiele korzystniej i wydajniej jest włączyć nawet dużą listę niż wykluczyć z zapytania pojedyncze rekordy.
  4. Poprzedzaj nazwę tabeli właścicielem tabeli w części FROM zapytania. Unikniesz dzięki temu dwuznaczności i kłopotów.
  5. W poleceniach INSERT zawsze jawnie wymieniaj listę kolumn. W przeciwnym wypadku każda zmiana struktury tabeli będzie generować błędy
  6. Funkcja COUNT - w każdym wypadku lepiej będzie użyć COUNT(1) niż COUNT(*)
  7. Przy łączeniu wielu tabel zwróć uwagę na kolejność występowania złączeń. Zawsze najkorzystniej będzie ograniczyć jak największą ilość wierszy w pierwszym złączeniu.
  8. Nie używaj funkcji SQL w części WHERE zapytania. Rozważ dodanie kolumny z wartością wynikową działania funkcji, a jeżeli użycie funkcji jest niezbędne, to korzystaj z indeksów bazujących na funkcjach (function-based indexes).
  9. Staraj się też nie używać symboli wieloznacznych na początku szukanego słowa klauzuli WHERE w wyrażeniu LIKE. Czyli dużo wydajniejsze będzie wyszukiwanie nazwisko LIKE ‘K%owalski’ niż nazwisko LIKE ‘%owalski’, nawet jeżeli na tym polu jest założony jakiś indeks, to nie zostanie on wykorzystany poprawnie .
  10. Jeśli tworzysz wyszukiwarkę, wyszukuj w trybie pełno tekstowym, przy użyciu MATCH oraz AGAINST. Jest to o wiele szybsze niż operator LIKE.
  11. Bez * przy zapytaniach. Zawsze warto w zapytaniu zaznaczyć, jakie kolumny chcemy otrzymać. Baza danych nie będzie musiała sprawdzać jakie kolumny są w bazie danych, co zmniejszy czas rezultatu. Zasada ta odnosi się do pkt. 6.
  12. Nie wykonuj niepotrzebnych operacji na danych . Nie zabijaj serwera stosując takie zapytanie: SELECT id FROM MyTable WHERE liczba-20 > 100; Zamiast tego, użyj SELECT id FROM MyTable WHERE liczba > 120; Rezultat będzie ten sam, a baza danych nie będzie musiała liczyć, dla każdego rekordu.

2. PHP

  1. Jeśli możesz, zainstaluj na serwerze rozszerzenie XDebug, dzięki czemu będziesz mógł dokładnie badać czas generowania strony, zużycie pamięci ram. W modyfikuje funkcję var_dump, która w przejrzysty sposób pokazuje zawartość.
  2. Zainstaluj na serwerze akceleratory: XCache, eAccelerator, Zend Optimizer
  3. Nie używaj cudzysłowu w deklarowaniu stringa. Czyli porzuć $String = "Moja zmienna zmienna = $zmienna"; na  $String = 'Moja zmienna zmienna = '.$zmienna. Parser nie będzie musiał przeszukiwać tekstu, w celu znalezienia zmiennych w nim zamieszczonych.
  4. Nie używaj @ który zagłusza wyświetlanie błędów. 
  5. Preinkrementacja jest szybsza od inkrementacji , czyli ++$zmienna jest szybsze od $zmienna++;
  6. Oszczędzaj procesor. Wylicz stałe równania: setcookie('cookie', 1, 60*60*24); zamień na setcookie('cookie', 1, 86400); 
  7. Cachuj wyniki z bazy danych, jeśli często się nie zmieniają.
  8. Usuwaj jednorazowe zmienne, by zwolnić pamięć - unset($zmienna);
  9. Isset jest szybsze od str_len, czyli:
    if(strlen($tekst)<15) { echo “Tekst jest za krótki”; } //wolne
    if (!isset($tekst{15})) { echo “Tekst jest za krótki”; } //szybsze
  10. Praktyki:
    1. // wolne
    2. if (preg_match("!^foo_!i", "FoO_")) { }
    3. // szybsze
    4. if (!strncasecmp("foo_", "FoO_", 4)) { }
    5.  
    6. // wolne
    7. if (preg_match("![a8f9]!", "sometext")) { }
    8. // szybsze
    9. if (strpbrk("a8f9", "sometext")) { }
    10.  
    11. // wolne
    12. if (preg_match("!string!i", "text")) {}
    13. // szybsze
    14. if (stripos("text", "string") !== false) {}
    15.  
    16. //wolne
    17. include("plik.php");
    18. //szybsze
    19. include("./plik.php");
    20.  
    21. //wolne
    22. for ($i=0; $i<sizeof($tablica); $i++) { ... }
    23. //szybsze
    24. $rozmiar=sizeof($tablica);
    25. for ($i=0; $i<$rozmiar; $i++) { ... }
    26.  
    27. //wolne
    28. echo $a.$b.$c;
    29. //szybsze
    30. echo $a,$b,$c;
    31.  
    32.  
    33. // Dobrze
    34. if (!strncmp(PHP_OS, 'WIN', 3)) {
    35. if (!strncasecmp(PHP_OS, 'WIN', 3)) {
    36. // Źle
    37. if (substr(PHP_OS, 0, 3) == 'WIN') {
    38. if (strtolower(substr(PHP_OS, 0, 3))) == 'win') {
    39. // Brzydko
    40. if (preg_match('!^WIN!', PHP_OS)) {
    41. if (preg_match('!^WIN!i', PHP_OS)) {





2. Serwer

  1. Zainstaluj sobie dodatki: Firebug, YSlow, PageSpeed
  2. Użyj serwera CDN (Content delivery network).
  3. Zmniejsz ilość zapytań na serwer. Możesz w tym celu użyć:
    CSS Sprite
    Data URI scheme
  4. Zmniejsz jakość grafiki na serwerze. Możesz użyć do tego SmushIt
  5. Kompresuj kod JavaScript, takimi narzędziami jak JavaScriptCompress
  6. Kompresuj CSS i JavaScript do GnuZip (*.gz). Zmniejszy to rozmiar wysyłanych danych.
  7. Zarządzaj cache przeglądarki. Wysyłaj nagłówki jak 304: Not Modified Header, gdy plik nie został zmieniony
  8. Wysyłaj nagłówek ETag
  9. Możesz użyć ajaxa do wysyłania danych POST. Teraz nawet komórki mają dobry silnik JavaScript, to więc nie powinno być żadnych problemów.
  10. Cachuj zapytania Ajax.
  11. Zamieszcz odnośnik do skryptu JavaScript na dole strony (w stopce). Zmniejszy to czas wyświetlenia strony.
  12. Jak masz mocny procesor na serwerze, a mało możesz wykorzystać łącza, skorzystaj z kompresowania strony
  13. Nie odkrywaj koła od nowa. Jest wiele wbudowanych funkcji, klas itp. Warto sobie je wszystkie przejrzeć.
  14. Jeśli używasz JQuery, możesz umieścić link do biblioteki od google-> http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js . Biblioteka jest umeiszczona na serwerach CDN oraz jest możliwość, że użytkownik wcześniej pobrał bibliotekę i ma ją w cache.


Komentarze - Zadaj pytanie, oceń!

: f3ca1 :
Facebook