Zrychlovanie aplikacie – cache
- drick
- Člen | 61
Ahojte. Snazim zas o cosi zlepsit vo vyvoji webovych aplikacii a tak som sa zacal zaoberat otazkou rychlosti nacitavania stranky a cache-ovania. Pozrel som si zopar tutorialov na internete a nie je mi celkom jasne ci tomu rozumiem.
Zaujimalo by ma, ci mi niekto neviete poslat nejaky link na projekt (napr. na githube), kde je pekne ukazane cache-ovanie presne tak, ako sa to ma robit. Resp. nebol by niekto ochotny zazdielat nejaky takyto projekt? Nemusi byt ani nijak extra rozsiahly..
Dakujem.
- hitzoR
- Člen | 51
Já se obecně snažím cachovat třeba všechno, kde by bylo potřeba při každém požadavku tahat z DB stejná data. V mojem případě třeba seznam jazyků, formáty data a času, položky menu atd. Pokud je uživatel přihlášený, tak třeba data o jeho profilu. Tímhle bych určitě začal.
Pak se můžeš dostat k pokročilejším věcem, které dost závisí na tom, jak se aplikace využívá. Třeba cachovat články a různé výpisy na homepage, kde je logicky největší návštěvnost. Invalidaci pak řeším tak, že na entitu článku (a i ostatních věcí, které se na homepage můžou měnit) v ORM mám pověšenou nějakou cachovací třídu, která po uložení do databáze zinvaliduje a znova vygeneruje cachovaný obsah.
- GEpic
- Člen | 566
drick napsal(a):
@Landsman Diky za odpoved.
Tak viacmenej by som iba potreboval vidiet niekde v nejakom projekte vyuzitie cache-u. Kde vsade sa to da vyuzit, ako spravne aby som dosiahol co najrychlejsie nacitavanie stranky.
Tam kde se neustále dokola načítají stejná data ve stejné podobě, může to být na úrovni modelu a cachovat primitivní data (řádky tabulky), nebo v aplikaci (business logice) při zpracování dat nějakým složitějším algoritmem.
Není to jen o tom data za každou cenu nacachovat, ale také si v té cache udělat pořádek, neukládat zbytečně velké bloky pokud není potřeba, ale cache si inteligentně rozdělit, aby ses neomezoval v následném použití dat.
- pesovo
- Člen | 1
Ahoj,
já třeba přistupuji k ukrutně pomalé webservice od klienta. Odezva je klidně i pět vteřin, takže si data ze servisy uložím do cache a pracuji s ní.
public function getData()
{
$data = $this->redis->get(self::CACHE_DATA);
if ($data === null) {
$data = $this->ws->getData(); // 5s
$this->redis->set(self::CACHE_DATA, $data);
}
return $data;
}
Je to jen takový nástřel, pro představu. Snad jsem správně pochopil tvůj problém :)
drick napsal(a):
@CZechBoY do dokumentacie som pozrel a tym zakladom rozumiem. Neviem vsak kde v praxi by som mal cache vyuzit.Teda, mam nejaku predstavu, len som hladal nejaky projekt, kde je cache vhodne a spravne vyuzity, to je vsetko..
- Michal Hlávka
- Člen | 190
drick napsal(a):
@CZechBoY do dokumentacie som pozrel a tym zakladom rozumiem. Neviem vsak kde v praxi by som mal cache vyuzit.Teda, mam nejaku predstavu, len som hladal nejaky projekt, kde je cache vhodne a spravne vyuzity, to je vsetko..
V tech videii jsou priklady z praxe :)