Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: cache
Forum PHP.pl > Inne > Hydepark
Diablos
Ejo.

Nie mam pojecia co to cache i na jakiej zasadzie dziala. Nie odsylajcie do wikipedii, googla lub search bo juz tam zagladalem. Czytalem o cache o tym ze np. zmniejsza ilosc zapytan... nie wykonuje wszystkiego czy cos w tym rodzaju. Sa to informacje jednak w ogole nie poukladane w mojej glowie... Jest wiele rzeczy, ktorych jeszcze nie zrobilem i nie umialbym narazie zrobic, ale mam jakis zalazek w glowie jak sie za to zabrac i pewnie metoda uczenia sie na wlasnych bledach bym zrobil. Cache to dla mnie czarna magia, nawet jakbym chcial to nie wiedzialbym jak sie za to zabrac, ba! nawet nie wiedzialbym jak z tego korzystac.
mike
Cytat(Diablos @ 2005-12-18 21:54:46)
(...) Cache to dla mnie czarna magia, nawet jakbym chcial to nie wiedzialbym jak sie za to zabrac, ba! nawet nie wiedzialbym jak z tego korzystac.

Zbyt mało wiedzy. Zbyt wielkie aspiracje.
IMO Zabierz się za coś co jest w Twoim zasięgu.

Przenoszę na Hydepark.
Diablos
@mike_mech: tu nie chodzi o aspiracje, nie zrozumiales smile.gif Nie mowie ze chce to zrobic, chcialbym miec o tym pojecie ... dlatego pytam was? co to dokladnie jest i na jakiej zasadzie dziala... co sie dzieje z zapytaniami (czy tam danymi), czy sa one nieuzywane itd...

Na wlasnym przykladzie powiem o co mi chodzi:

- system szablonow

1. Wiem do czego sluzy, wiem na jakiej zasadzie dziala.
2. Nie odwazylbym sie go napisac, wole korzystac z dostepnych OPT, Smarty.
3. Mam o nim pojecie, wiem jak za niego sie zabrac, wiem ze pisanie takowego byloby dla mnie nowym doswiadczeniem, wiem ze nie mialby wielu funkcji.

Interesuje mnie praktycznie tylko 1 pkt. Nie chce narazie pisac cache...
mike
Przykład cacheowanie danych z bazy danych.

1. Sprawdzasz czy jest plik z cache.
2. Jeśli jest pobierasz z niego dane.
3. Jesli nie ma wykonujesz zapytanie pobierające dane i zapisujesz do pliku.

Jeśli uzywasz tego jak trzeba, czyli na przykład do pobrania dancy, które zawsze są takie same. Na przykład dane o konfiguracji strony to zaoszczędzasz na ilości wykonywania zapytań. Bo po co każdy ma pytac o to samo?

A jak Ci się dane zmienily to kasujesz plik. Tak żeby pierwsza osoba która zobaczy strona "wygenerowała go".
dr_bonzo
Cache'owanie - to metody sluzace przyspieszaniu dzialania np. programow/aplikacji poprzez zapamietywanie _wynikow_ obliczen. Jest to takze przechowywanie najbardziej uzytwanych danych na nosniku o szybszym dostepie (np. pamiec cache procesora -- duzo szybsza od RAMu, i mimo ze jest jej malo to znacznie przyspiesza wykonywanie programow), itd.
Systemy szablonow: szablon trzeba przeparsowac, sprawdzic jego poprawnosc, wstawic do niego dane, itd. To zajmuje duzo (wartosc wzgledna) czasu. Jesli dana stronea bedzie wyswietlana wielorotnie to zamiast wykonywac te obliczenia za kazdym razem zapamietujemy np. tylko wyenerowany html i wyswietlamy go.
Diablos
Rozumiem ze zwiazane to jest z szybszym wyczytywaniem danym z plikow niz z bazy?
mike
Cytat(Diablos @ 2005-12-18 22:55:19)
Rozumiem ze zwiazane to jest z szybszym wyczytywaniem danym z plikow niz z bazy?

Też. Ale przede wszystkim ze zmniejszeniem ilości wykonywanych operacji.
Slump
Tak samo db jak i plikow to sie tyczy smile.gif
Ociu
Prosty przykład
  1. <?php
  2. class cache {
  3. private static $flag;
  4.  
  5. public function __construct( $prefix ) {
  6. self::prefix( $prefix );
  7. }
  8.  
  9. private function prefix( $flag ) {
  10. self::$prefix = $flag;
  11. }
  12.  
  13. public function write($id, $data) {
  14. file_put_contents(THRORIN_CACHE.md5($id).'.cache', $data)
  15. }
  16.  
  17. public function read($id){
  18. return file_get_contents(THRORIN_CACHE.md5($id).'.cache');
  19. }
  20.  
  21. public function exists($id) {
  22. return file_exists(THRORIN_CACHE.md5($id).'cache');
  23. }
  24. }
  25. ?>


  1. <?php
  2. class DB extends cache {
  3. public function query( $sql ) {
  4. if($this->exists($sql)) {
  5. $q = $this->read($sql);
  6. # ...
  7. } else {
  8. $his->sql = mysql_query($sql);
  9. }
  10.  
  11. public function fetch() {
  12. if($this->exists($sql)) return true;
  13. # ...
  14. }
  15. }
  16. ?>


pozdrawiam
bela
Ociu, ten kod jest zły. Najpierw pomyśl co wklejasz, jeśli newbie się pyta.

1. Odwołujesz się do statycznych metod, które nie są statyczne.
2. W metodzie prefix, masz self::$prefix, a powinno być $this->flag.
3. $this->flag bez static.
4. Czemu Baza dziedziczy z Cache? Jak chcesz powinna implementować interfejs Cachable, czy jakiś taki.

Pewnie jeszcze czegoś bym się czepił, ale nie mam czasu ;]
mike
Co do przykładu ( kiedyś dawno napisałem z kumplem takie coś )
Sterownik Bazy danych
Jes tam mechanizm cache'owanych zapytań do bazy danych.
Jak chcesz to sobie zerknij.
Ociu
Bela to tylko przykłady pisane z palca. Napewno są błędy, część naukli polega na wyłapywaniu błędów w innych kodach.

pozdrawiam
bela
Ja to odbieram w inny sposób: pokazujesz komuś kod, mówisz że jest fajny i uczysz go tym samym złych rzeczy.
Dla to nie jest nauka, łapanie Twoich błędów. To zwykła rutyna. Za to Ty możesz wyciągnąć lub nie coś z tych wskazówek i pisać lepszy kod.
Rada na przyszłość? Nie pisz z palca ;]
Ociu
Nie sztuką jest dostać gotowy kod i podziwiać jaki on jest fajny, ale sztuką jest dostać niegotowy kod, zrozumieć filozofie i wyłapać ew. błędy.

A jako, ze są święta: Masz rację
bela
To nie było personalnie. Poza tym czasem lepiej dać pseudo-kod bądź kroki algorytmu w punktach. Ok, koniec OT.
Diablos
Hm, a na jakiej zasadzie cache sprawdza czy dane ktore chce pobrac juz sa zapisane do pliku? Rozumiem, ze przez sprawdzenie czy plik istnieje. Ale gdy dane w bazie ulegaja zmianie skrypt musi rozpoznac przeciez ze ta zmiana nastapila i ze trzeba generowac nowy plik. Wtedy czynnosci jest jeszcze wiecej pobranie z bazy, porownanie, utworzenie pliku, a sprawdzic czy dane w bazie zostaly zmienione przeciez trzeba zawsze.

Tzn. ja to tak rozumiem tongue.gif Napewno rozumiem zle bo gdyby tak bylo to cache nie mialoby sensu.
bela
Wystarczy, że zmienisz zawartość pliku przy innym zapytaniu niż SELECT. Jednak zauważ, że rzadziej zmieniasz bazę niż pobierasz z niej dane.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.