Ako zrýchliť načítavanie stránky

Ako zrýchliť načítavanie webu – 1. časť

V poslednom období som viac krát riešil problém s načítavaním webových stránok, ktorým sa zvačšil objem dát (hlavne v databáze). Prvotné reklamácia smerovala samozrejme na server a jeho výkon. Po par testoch sa však zistilo, že výkon je v poriadku a server sa nudi aj v prípade, že sa stránka načítava 3-4 sekundy.

Pozrieme sa na to, ako si našu stránku otestovať a vyladiť aby bola rýchlosť načítavania čo najlepšia.

Táto téma je veľmi rozsiahla, tak som sa ju rozhodol rozdeliť do troch časti.

  1. časť – pozrieme sa ako si zmerať rýchlosť načítavania, ako nájsť problém a ako vyriešiť najčastejšie sa opakujúce sa problémy
  2. časť – optimalizácia databázy
  3. časť – pozrieme sa na optimalizáciu prostredia, ako si stránku upraviť, aby potrebovala na prevádzku minimálny výkon

speedweb-hosting

 

 

 

 

Analýza prevádzky a načítavania

Skôr, ako začneme prechádzať samotný kód stránky, je dobré pozrieť sa na procesy webservera a skontrolovať si,  napríklad vo výpise top, či naša stránka zaberá vyšší výkon procesora. Väčšinou takáto pomalá stránka dokáže zabrať celé jadro procesoru, ktoré obsluhuje daný proces.

Ak máme pri výpise tom podobné hodnoty ako na obrázku, je potrebné so začatím debugu kódu stránky. Príklad výpisu top príkazu:

výpis procesov

výpis procesov

Ďalšou veľmi dôležitým nastavením pri analýze webu je logovanie pomalých query a query, ktoré nepoužívajú indexy. Veľká väčšina pomalých webov nemá správne zadefinované indexy. Viac o optimalizácií query a databáz si povieme v pokračovaní môjho článku.

Pre debugovanie webovej stránky si spravte radšej kopiu webu a testujte všetky príklady na subdoméne. Napríklad dev.speedweb.sk

Meranie spotrebovanej RAM

Merať spotrebovanú je možne rôznymi spôsobmi. Najjednoduchšie to je pomocou nastavenia auto_append_file. Vytvoríme si skript memory_usage.php a tento skript zadefinujeme ako auto_append_file. Toto nastavenie nám spraví to, že každá návšteva nám zaloguje hodnotu spotrebovanej ram.

Príklad skriptu memory_usage.php

<?php

$memory = memory_get_usage();

function nice_val ($val) {
         if (abs($val) < 1000 * 1024) {
                return number_format($val / 1024, 2) . “ kB“;
         }
        if (abs($val) < 1000 * 1048576) {
               return number_format($val / 1048576, 2) . “ MB“;
        }
       return $val;
}

$mem = nice_val($memory);
$line = „{$_SERVER[‚SCRIPT_FILENAME‘]} => {$mem}“;
openlog(„PHP Memory usage“, LOG_PID, LOG_SYSLOG);
syslog(LOG_WARNING, $line);

Merať spotrebovanú ram môžeme v tomto prípade len ak máme prístup k logom servera a vieme si nastaviť PHP premennú auto_append_file. Ak tieto možnosti nemáme, môžeme si na konci našich skriptov vložiť kód, ktorý nám zapíše spotrebovanú RAM do súboru.

Príklad kódu:

$memory = memory_get_usage();
$line = "{$_SERVER['SCRIPT_FILENAME']} => {$memory}";
$fp = fopen('memory.log', 'w');
fwrite($fp, $line);
fclose($fp);

Meranie času

Na meranie času trvania skriptu je potrebné merať tak, že si odčítame čas na konci a začiatku skriptu. Použijeme na to funkciu microtime() s parametrom true.

Príklad kódu

<?php
$zaciatok = microtime(true);
// Váš kód$koniec = microtime(true);
$cas = $koniec – $zaciatok;echo „Skript trval $cas sekund\n“;
?>
Takto môžeme merať čas načítavania na rôznych miestach kódu. Zvyčajne sa dopracujete k pár problematickým miestam, ktoré bude potrebné prerobiť a optimalizovať. Najčastejšie to býva generovanie obrázkov, pdf súborov a volanie databázových query. Problematika vytvárania tabuliek a optimalizácia query je na tolko obsiahla, že som sa jej rozhodol venovať zvlášt clánok.
Ak by ste mali otázky, pripomienky k môjmu článku píšte na: devel@speedweb.sk
Vlastný webhosting

Vlastný webhosting