skokové zvýšení návštěvnosti přes noc, nemáte tipy co dělat?
- mcmatak
- Člen | 504
jeden projekt mne překvapil a přes noc vyrostl z 2000 unikatů denně na 10000 unikátů
a co je horší ti lidé klikají jak zběsilý, každou sekundu více než 200req, už jsem koupil dva nové procesory takže nějak se to snad bude řešit, ale stejně
máte někdo tipy na tyto problémy?
třeba nějaký článek o hlavičkách js/css aby se cachovali, aby to vůbec se serveru neptalo, vzhledem k tomu, že stejně webloader checkuje podle filemtime nazev css/js spritu tak není potřeba ještě odesílat uživateli nebo něco kontrolovat, aktuálnost je zajištěna na straně nette
přiznám se že kešovaným hlavičkám sem nikdy neporozuměl, vždy např. eshop stejně potřebujete mít neustále aktuální jak to chcete cachovat? vždyť je tam strašně moc dynamických prvků
nebavím se teď o cache na straně nette, kdy nemusím šahat do dtb apod., ale cache mezi prohlížeči, o tom že mám s každým req 62 subreq na obrázky, css, js atd.
- nAS
- Člen | 277
- statická data (js, css, img, …) dej na jiný server a použij tam např. lighttpd, hlavně ne Apache
- pokuď tam máš hodně požadavků na js a css, zkus spojit související js do jednoho (a stejně css)
- malé obrázky taky můžeš spojit do jednoho (css sprites)
- o hodně můžeš snížit počet requestů tak, že si při každém deployi vygeneruješ nějaký hash a ten přidáváš do URL všech statických dat (např.: http://example.com/img.jpg?… ) a pak můžeš odesílat hlavičku, že stačí soubor kontrolovat třeba 1× za den. A při dalším deployi se změní hash, prohlížeč to bere za nový soubor a zase si ho vyžádá.
- případně dej statická data na nějaké CDN a máš to pořešené (ale zase za to zaplatíš)
- Patrik Votoček
- Člen | 2221
nebavím se teď o cache na straně nette, kdy nemusím šahat do dtb apod., ale cache mezi prohlížeči, o tom že mám s každým req 62 subreq na obrázky, css, js atd.
v tom případě to na tohle fórum nepatří
- Nicměně doporučuju ti spojit všechna CSS a JS do jednoho souboru. A celé to minifikovat https://github.com/…build-script.
- JS která jdou načítat z CDN (jQuery etc.).
- Layoutové obrázky spojit do sprites http://css-tricks.com/css-sprites/
- a před celou aplikaci bych postavil Varnish http://www.phpconference.co.uk/…rnish-action
EDIT: kua zase pozdě
- mcmatak
- Člen | 504
- css/js sprity jak říkám používám webloader, nicméně ten prostě když spojuje 20 souborů tak udělá 20× filemtime a to je problém
- image sprity no o nich vím, ale doporučujete udělat sprite na celý náhled? protože ono těch buttonů a ikonek je dohromady tak 5–10 víc prostě ne, ale jo je mi jasné že je to jedna z věcí
- CDN, jiný server hmmm, jen si říkám jestli je to reálné pořizovat další hosting? nebo další server?
- varnish mi nic neříká zkusím prohledat
tohle taky zajímavé
o hodně můžeš snížit počet requestů tak, že si při každém deployi
vygeneruješ nějaký hash a ten přidáváš do URL všech statických dat
(např.: http://example.com/img.jpg… ) a pak můžeš odesílat
hlavičku, že stačí soubor kontrolovat třeba 1× za den. A při dalším
deployi se změní hash, prohlížeč to bere za nový soubor a zase si ho
vyžádá.
to musím promyslet
Editoval mcmatak (8. 2. 2012 14:35)
- Nox
- Člen | 378
- Tak si to uprav ať se výsledek cachne a kontroluje se jen existence toho výsledku…při změně to smažeš = –19× filemtime. Obecně mi přijde účinnější než zkoušet něco zrychlit je se pokusit to úplně přeskočit.
- –9 requestů je málo? bez dlouhé expires to je –1800 requestů za sekundu
Koukni třeba na youtube: http://s.ytimg.com/…flcB5eQ_.png
Editoval Nox (8. 2. 2012 16:17)
- Nox
- Člen | 378
Proč by to nešlo? Říkám → přepiš si to. Jestli to chápu dobře, tak ten skript ověřuje aktuálnost těch různých zdrojových souborů ⇒ zruš to. Bude jen ověřovat existenci finálního souboru. Takže jediný rozdíl bude, že při změně nějakého z těch souborů tento finální soubor smažeš, místo aby se detekovala změna ve zdrojích sama a za to dostaneš –3800× filemtime / sec.
- Panda
- Člen | 569
nginx + PHP FastCGI Process Manager, tím získáš poměrně snadno nějaký výkon i bez dalšího serveru (zvlášť co se týče toho statického obsahu, ale i to PHPčko se bude pak mnohem lépe vypořádá se zátěží).
Jinak pro obrázky, JS a CSS přidat expires, obsah předgzipovat, nasadit APC (pokud ještě není), upravit ten WebLoader…
- Melmen
- Člen | 132
Panda napsal(a):
Ohledně toho NGINXu, na serveru jsem ho používal spolu s apache jako reverzní proxy. Nginx mi běžel na portu 80, přijímal požadavky. Statistické stránky (obrázky, css a js) zpracovával sám, zbytek se poslal na apache kterej běžel na localhost:8283 – pro každý virtualhost jiný port. A hlavně jsem mohl používat „apačský .htaccess“ :)
Editoval Melmen (8. 2. 2012 19:46)
- Panda
- Člen | 569
A právě nginx nic jako „apačský .htaccess“ nezná a proto může mít takový výkon. ;-)
.htaccess je k ničemu. Je to soubor, který se modifikuje jen jednou za několik měsíců/let a pak se z něj jen milionkrát za den zbytečně čte. A přitom to jde všechno pohodlně nastavit v configuráku vhostu. Pokud někomu na projektu vadí 19× filemtime, tak první, čeho by se měl zbavit, je právě .htaccess.
Mimochodem: zkus si poslat 500 současných PHP požadavků na Apache + mod_php a pak nginx + PHP FPM. Druhá konfigurace se s tím vypořádá mnohem lépe.
- mcmatak
- Člen | 504
Nox: Nj ale já nevím jak to přepsat, název souboru je přece unikátní a závisí na aktualni verzi všech 20 souboru a proto je tvořen nejakym hash z jejich nazvu jak jinak to uděláš?
Panda: gzip děla server automaticky, apc mám,
Obrázky, css, js expres nastuduji ale jak vyřešit aby se na ne browser vůbec neptal?tak jako tak to bude req ne?
Nginx bude pro mého správce asi moc divoká voda
Ale ty benchmarky mne docela zajimaji
- Nox
- Člen | 378
mcmatak napsal(a):
Nox: Nj ale já nevím jak to přepsat, název souboru je přece unikátní a závisí na aktualni verzi všech > 20 souboru a proto je tvořen nejakym hash z jejich nazvu jak jinak to uděláš?
Dáš to tak, aby metoda příjmala identifikátor, který pak použije pro vytvoření jména … podobně jako u cache->save používáš nějaký key místo aby to byl hash obsahu
- iguana007
- Člen | 970
mcmatak napsal(a):
Nox: jeden z nás to nedomyslel do konce, jak určit ten identifikátor? Na zaklade čeho? Protože obvykle to bude nejvyšší filemtime nebo názvy ale jak ten identifikátor vytvořit?
Co to je za web, že to tak strašně řešíš? Přeci stačí ty soubory
přegenerovat, pouze když tam něco změníš … nebo ty css a js se ti tam
mění nějak za chodu samy?
Při deploy nové/upravené verze nevidím zas tak velký problém smazat
nějaký výsledný vygenerovaný soubor, aby se přegeneroval znovu sám.
Spíše bych se zaměřil na ten statický obsah, expire, cache apod.
- Nox
- Člen | 378
iguana007
Myslim že mcmatak řeší vše, jen u tohoto jsme se zatím
ještě nepochopili, tak je k tomu více příspěvků. Ale jde tu zmínit
vše, co může dopomoct k lepšímu výkonu.
mcmatak napsal(a):
Nox: jeden z nás to nedomyslel do konce, jak určit ten identifikátor? Na zaklade čeho? Protože obvykle > to bude nejvyšší filemtime nebo názvy ale jak ten identifikátor vytvořit?
Proto jsem ti tam dal příklad s cachí, identifikátor/klíč si vybereš stejně jako u cache si vymyslíš vhodný řetězec. Jednoduše tam kde by webloader generoval název teď místo toho použije tebou dosazený → zruší se tahle závislost na daných souborech. Viz iguana007 přepokládám, že nemáš nějaký hyperdynamický systém, takže když budeš ty CSS/JS deployovat, tak ten jeden cachovaný soubor mázneš a je to.
Editoval Nox (8. 2. 2012 23:58)
- Patrik Votoček
- Člen | 2221
mcmatak napsal(a):
Nox: Nj ale já nevím jak to přepsat, název souboru je přece unikátní a závisí na aktualni verzi všech 20 souboru a proto je tvořen nejakym hash z jejich nazvu jak jinak to uděláš?
Pokud mám hodně navštěvovaný projekt měl by statický obsah (JS, CSS, obrázky) servírovat přímo HTTP server (právě z důvodů snížení zátěže). Proto bych se vykašlal na celej webloader (nebo jak se to jmenuje). A řešil vytvoření jednoho minifikovaného CSS / JS souboru už při deploymentu.
… ale jak vyřešit aby se na ne browser vůbec neptal?tak jako tak to bude req ne?
Pošleš patřičné hlavičky. Neco o tom je v tom videu o Varnish cache nebo http://symfony.com/…aris2011/574 nebo tady http://webexpo.cz/…ie-kesovani/
Nginx bude pro mého správce asi moc divoká voda
Tohle je ale jedna z věcí, která dokáže serveru doopravdy hodně ulehčit.
- Nox
- Člen | 378
Už se o tom tady mluvilo: expires header a/nebo hash https://forum.nette.org/…ipy-co-delat#…
- llook
- Člen | 407
mcmatak napsal(a):
Obrázky, css, js expres nastuduji ale jak vyřešit aby se na ne browser vůbec neptal?tak jako tak to bude req ne?
To vyřešíš posíláním správných hlaviček, především Expires.
Nevím teď přesně zápis, ale nějak lze v Apachi nastavit třeba tak, aby
každý JPG/GIF/PNG/CSS/JS soubor vracel
Expires: Sun, 9 Feb 2020 12:05:01 GMT
a pak se na ty soubory
prohlížeč hodně dlouho ptát nebude.
Tady je to docela vyčerpávajícně popsáno: http://www.jakpsatweb.cz/…slation.html
Někde bych si pak nadefinoval kód, který bych v šabloně přidal ke všem těm odkazům na statické soubory:
<img src='obrazek.jpg?{$version}>
Když změníš $version
, pro prohlížeč se tím změní
adresa obrázku a načte si ho znova.
- Panda
- Člen | 569
mcmatak napsal(a):
Panda: gzip děla server automaticky, apc mám,
To určitě dělá, ale při každém požadavku a pak výsledek zapomene. :-) To předgzipování je kvůli tomu, aby se nemuselo při každém požadavku znovu komprimovat a aby se mohl načítat menší soubor.
Jinak mě ještě napadla jedna věc, jak poměrně levně zvýšit hodně výkon – RAM disk. Pokud bys tam dal ten obsah, ke kterému se často přistupuje (JS/CSS + třeba PHP, ale s APC to asi nemá moc význam), tak by to mohlo hodně ulehčit disku a snížit přístupové doby.
V první řadě bych ale analyzoval, co nejvíc zpomaluje a nasadil ten nginx + PHP FPM. Na konfiguraci není nijak složitý a ulehčí opravdu hodně.
- ic
- Člen | 430
Sice to přímo nesouvisí s nette, ale hodně pomůže zmenšit počet obrázků… jednak obrázky použité na jedné stránce sloučit do jednoho (viz google: http://www.google.cz/…_logo102.png) a posouvat pak zobrazenou část pomocí css.
No a pak taky není na škodu některé obrázky vyházet a nahradit je nějakou z novinek css3… pak lze bez obrázku mít kulaté rohy, přechody, stíny textu i elementů, natočené boxíky a mnoho dalších. Těch co by to jejich prohlížeče nezobrazili stále ubývá.
- srigi
- Nette Blogger | 558
Celkom dobre tipy na zrychlenie Apache sa nachadzaju v .htaccess
projektu HTML5Boilerplate.
Odporucam prestudovat kazdemu.