Autor Zpráva
kimi
Profil *
Ahoj, potřeboval bych poradit s cachováním, stránka se mi načítá strašně dlouho (resp. trvá, než se vůbec začne načítat, samotný načítací čas je v pořádku).

Ve Firefoxu jsem si prohlédl hlavičky, pro jistotu jsem je porovnal i s jinými weby, např. seznam.cz, který je svými daty objemnější, přesto má v načítacích časech lepší hodnoty. Něco bude způsobeno asi serverem (s tím nic neudělám), ale něco pomoci bych si snad někde nějak mohl.

Můj web, hlavičky odezvy
GET /stranka/ 200 OK | domena.cz | 8,1 KB | 1.6s
Accept-Encoding    gzip;q=1.0, deflate;q=0.5
Cache-Control    max-age=1800
Connection    Keep-Alive
Content-Encoding    gzip
Content-Type    text/html; charset=utf-8
Date    Fri, 02 Aug 2013 07:02:42 GMT
Expires    Sat, 03 Aug 2013 07:03:42 GMT
Keep-Alive    timeout=15, max=98
Last-Modified    Thu, 25 Jul 2013 09:49:57 GMT
Pragma    public
Server    Apache/2.2.16 (Debian)
Transfer-Encoding    chunked
Vary    Accept-Encoding
x-powered-by    PHP/5.3.3-7+squeeze14

Trvá 1,5s jen než se začne něco dít, zbytek (obrázky, css, atd.) se načtou do 0,5s.

Hlavičky požadavku
Accept    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding    gzip, deflate
Accept-Language    cs,en-us;q=0.7,en;q=0.3
Connection    keep-alive
Cookie    ...
DNT    1
Host    www.domena.cz
Referer    http://www.domena.cz/stranka/
User-Agent    Mozilla/5.0 (Windows NT 6.1; rv:20.0) Gecko/20100101 Firefox/20.0


Pro porovnání Seznam.cz

Hlavičky odezvy
GET www.seznam.cz 200 OK | 16,6 KB | 77.75.76.3:80 | 140ms
Cache-Control    max-age=0, no-cache, no-store, must-revalidate
Connection    keep-alive
Content-Encoding    gzip
Content-Type    text/html; charset=UTF-8
Date    Fri, 02 Aug 2013 07:09:34 GMT
Expires    Fri, 02 Aug 2013 07:09:34 GMT
Pragma    no-cache
Server    nginx/1.2.3
Set-Cookie    as=cbfpJUH8ge512poKSUhN5g==; Domain=.seznam.cz; expires=Wed, 29-Jan-2014 07:09:34 GMT; Path=/
Transfer-Encoding    chunked
X-Frame-Options    sameorigin
X-XRDS-Location    http://id.seznam.cz/yadis
Hlavičky požadavku
Accept    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding    gzip, deflate
Accept-Language    cs,en-us;q=0.7,en;q=0.3
Connection    keep-alive
Cookie    hint=MTM2OTUwNzMyMiwwOzM1LDEsMTM3NDc2NDQwMywx; dp=columnjs; as=D6WNQQ2PBUhmB8tDB1tSWQ==; ftxt_pref=qwPt4LAxweJ-4LPxZZughXuh9VQ8kXjN4Ak80bPowvzr; sznmaildomain=email.cz; getIe10Count=1; cache0=NalWr3Txc3FRyeuOfNHK2GLQuHfrCr8O3oeW8x3MB/Y7JxRDCoAxgjqIOC37gmOMEUJbG74sbRAk5PAloqtSHh1XVNReA47Pa2924qsBQVgrMkUvdp1eup/MyMh6dvLyW6pbgiDxZWSvn812XzWcKyZiLXwPnFIuGyrIbbVgWOw=; hw=86400
DNT    1
Host    www.seznam.cz
User-Agent    Mozilla/5.0 (Windows NT 6.1; rv:20.0) Gecko/20100101 Firefox/20.0

Proč má seznam nastaveno no-cache, no-store, must-revalidate, já cache na 15 minut, expires nastaveno na 24 hodin a přesto to tak dlouho trvá? Jasně, jemu se obsah mění, tak ho nesmí cachovat, ale proč je tedy načtení tak rychlé a u mě pomalé?

Hlavičky požadavku máme oba stejné, ty se berou kde? Četl jsem toho celkem dost, ale nejsem úplně programátor a začínám se v tom ztrácet...

Rady, tipy?

Díky.
loyza
Profil
Tak nejprve bych se podíval do kódu té stránky. Pokud se generuje 1,5s tak bych hledal místa kde se dá stránka zrychlit. Druhá věc je cachování na straně serveru a až třetí bod jsou hlavičky na straně klienta.

Důvod je ten, že i když nastavíš ty hlavičky správně, tak první návštěva klienta na stránce bude pomalá a až další zobrazení té stránky bude rychlé protože půjde z cache prohlížeče. Problém je, že k tomuto druhému zobrazení nemusí vůbec dojít (uživatel odejde, nebo se zpět na tuto stránku nedokliká).
Takže zkus projít zdrojový kód a najít pomalá místa, která můžeš zoptimalizovat.A pokud i potom bude stránka pomalá tak bych zkusil cachovat celý obsah vygenerované stránky (pokud je to možné, což ne vždy je). Pokud to není možné, tak zkus cachovat kusy stránky.

Pokud nevím co ta stránka dělá, tak je těžké radit. Každopádně si myslím, že přesně tak to mají v tom seznamu. Mají rychlý kód a cache na straně serveru.
kimi
Profil *
loyza:
aha, měl jsem za to, že v prohlížeči bude nějakým způsobem zpracovaná cache i ze serveru, ne jen prohlížečová. Asi blbost :-) V PHP je následující:

header('Accept-Encoding: gzip;q=1.0, deflate;q=0.5');
header("Pragma: public");
header("Cache-Control: max-age=1800"); // 30 mins
header('Expires: '.gmdate("D, d M Y H:i:s",time() + 60 * 60 * 24).' GMT'); //den
$the_date = ...; //datum posledni modifikace z DB nebo time()
header('Last-Modified: ' . gmdate('D, d M Y H:i:s',$the_date) . ' GMT');

Cílil jsem přímo na cache, myslel jsem, že problém bude tady. Tenhle zápis výše uvedený je správně?

Zkusím ještě postupně měřit jednotlivé kusy kódu, ale nerad bych dělal něco, co je teď zbytečné. Nastavení té cache tady mám dobře?

Pak ještě v .htaccess je, ale tady zatím problém není, obrázky se načítají vcelku svižně.
RewriteEngine on

<FilesMatch "\.(jpg|jpeg|png|gif|swf|css|js)$">
    Header set Expires: "Thu, 15 Apr 2050 20:00:00 GMT"
</FilesMatch>
loyza
Profil
Asi jsi mě nepochopil. Na tyhle hlavičky a htaccessy se vykašli, úplně je vyhoď. Udělej stránku rychlou bez toho. Až se stránka bez těch hlaviček bude načítat rychle tak začni přemýšlet o těchto hlavičkách a o cache v prohlížeči, ale nejdůležitější je aby se stránka generovala rychle.

Jinak ty hlavičky vypadají, že jsou v pořádku. Ale nijak výrazně jsem to nezkoumal, to není tvůj bottleneck.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: