Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
PHP
Dvojitá cache
php
17. února 2003, 00.00 | Asi každý webmaster z počátku své kariéry řeší otázku: jak dostat na své stránky
návštěvníky. Nedlouho poté však dochází ke zcela odlišnému problému. Který ovlivní
jednak jeho názor na obsah webových stránek stejně jako způsob jejich vytvoření.
Asi každý webmaster z počátku své kariéry řeší otázku: jak dostat na své stránky návštěvníky. Nedlouho poté však dochází ke zcela odlišnému problému. Který ovlivní jednak jeho názor na obsah webových stránek stejně jako způsob jejich vytvoření.
První otázkou se zabývat nebudu. Ta spíše závisí na dobrém nápadu než na nákladné reklamě. Zato ta druhá myšlenka si rezervuje celý tento článek. V podstatě jednoduchým znakem, který návštěvníkovi ihned naznačuje, jak je daná stránka navštěvovaná je její vzhled. Řekl bych, že mi dáte za pravdu. Protože až na pár výjimek platí rčení, že čím více je daná stránka navštěvovaná, tím méně obsahuje datově tj. graficky náročných prvků. Extravagantní flashe nahradí přehledná tabulka, obrázková tlačítka nahradí CSS apod.
Důvod je velice jednoduchý v podstatě každý hosting (server i web) platí za trafik. To však často není hlavním důvodem pro majetnější společnosti. Kde spíše bývá klasický problém vycházející z aspektu, že odeslat milion 100kB stránek je pro server mnohem náročnější než odeslat stejné množství ve velikosti 10kB.
Takovýto způsob šetření se může projevit na stránkách záměnou aktuálního času za aktuální datum, který je přeci jenom o trochu trvanlivější. Tím se nenápadně přesouvám k části, že typicky opomíjeným způsobem šetření zátěže serveru, v současné době dynamicky generovaných skriptů, bývá hlavička Expires1.
Napadne-li vás v této souvislosti, že s touto hlavičkou se mi přece při načtení takovéto stránky z cache nenačte nový banner, pak se mýlíte. Bannery jsou v současné době často generovány Javascriptem. A pokud čirou náhodou nejsou tj. jsou statické, stačí do vaší stránky vložit IFRAME, u kterého tato hlavička nebude.
Další a to velmi rozšířenou technikou šetření je Output Buffering. Samotný output buffering neznamená nic jiného než prosté za gzipování odesílaných dat (pravděpodobně HTML, CSS či JS). Tento způsob v reálu zmenší odeslaná data na 20 až 25%. Je pravdou, že OB pomáhá zmenšit trafik a tím i trošičku odlehčit serveru. Ale samotné gzipování taky něco spolyká. V konečné fázi OB uvítají spíše klienti, protože gzipovanou stránku procpete českým Internetem dříve než její negzipovanou verzi.
Proto nutně dojdete k nutnosti vytvořit si vlastní serverovou cache. Pro její implementaci budete potřebovat CRON resp. nějakého deamona2, který by např. každých 15 minut vytvořil gzipovanou a negzipovanou verzi stránky(-nek)3.
Od této pozice lze postupovat dvěmi směry podle toho co přesně váš web vyžaduje. V první verzi tyto stránky umístníte na přímo na web. Server k nim přistupuje jako ke statickým stránkám, tudíž ušetříte čas i výkon na spuštění PHP či ASP. Problém však bude se zapnutím Output Bufferingu, kde se musíte spolehnout na nastavení serveru.
Druhý způsob je použitelný pro náročnější weby, které obsahují formuláře. Při spuštění dané stránky se můžete podívat jaký má uživatel jazyk (automaticky ho přesměrovat) či odesílá-li vám nějaká data. Při převládajícím požadavku GET stačí pouze na stránku odeslat readfile('gzip...') a skript ukončit. Pro vyšší rychlost načtení daného skriptu např. PHP je dobré, aby skript samotný byl minimální. Tj. obsahoval pouze podmínky za kterých má něco udělat. U jednotlivých podmínek bude jen readfile(... či require..., kde se daný stav ošetří.
Reálně by to mohlo vypadat asi takto:
|
Tento skript v první řadě zkontroluje, zda nebyl odeslán nějaký formulář. Následně si ověří, zda existuje gzipovaný soubor. Případně ho vytvoří. Vidíte, že obsah daného souboru se requiruje. Následně zapíše hlavičky s expirací a rozhodne se zda předá data na zpracování či přímo zapíše již připravená data na výstup a to buď gzipovaně či standardně, pokud to klient nepodporuje.
A to je zhruba vše. Samozřejmě tento způsob je jen jeden z několika možných řešení. Záleží jen na vás, zda si vymyslíte něco šitého na míru či použijete již něco existujícího.
1. – u dynamických skriptů automaticky nastavena na okamžik
vytvoření
2. – či skript samotný
3. – nové požadavky
jsou obslouženy starými výstupy
Diskuse k článku
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007