Diablos
18.12.2005, 21:54:46
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
18.12.2005, 21:58:23
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
18.12.2005, 22:18:48
@mike_mech: tu nie chodzi o aspiracje, nie zrozumiales

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
18.12.2005, 22:24:22
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
18.12.2005, 22:27:43
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
18.12.2005, 22:55:19
Rozumiem ze zwiazane to jest z szybszym wyczytywaniem danym z plikow niz z bazy?
mike
18.12.2005, 22:58:48
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
24.12.2005, 02:46:46
Tak samo db jak i plikow to sie tyczy
Ociu
24.12.2005, 10:59:52
Prosty przykład
<?php
class cache {
public function __construct( $prefix ) {
self::prefix( $prefix );
}
private function prefix( $flag ) {
self::$prefix = $flag;
}
public function write($id, $data) {
file_put_contents
(THRORIN_CACHE
.md5($id).'.cache', $data) }
public function read($id){
}
public function exists($id) {
}
}
?>
<?php
class DB extends cache {
public function query( $sql ) {
if($this->exists($sql)) {
$q = $this->read($sql);
# ...
} else {
}
public function fetch() {
if($this->exists($sql)) return true;
# ...
}
}
?>
pozdrawiam
bela
24.12.2005, 12:30:53
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
24.12.2005, 12:54:17
Co do przykładu
( kiedyś dawno napisałem z kumplem takie coś )Sterownik Bazy danychJes tam mechanizm cache'owanych zapytań do bazy danych.
Jak chcesz to sobie zerknij.
Ociu
24.12.2005, 15:35:56
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
24.12.2005, 17:06:59
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
24.12.2005, 18:26:07
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
25.12.2005, 02:03:24
To nie było personalnie. Poza tym czasem lepiej dać pseudo-kod bądź kroki algorytmu w punktach. Ok, koniec OT.
Diablos
25.12.2005, 12:43:56
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

Napewno rozumiem zle bo gdyby tak bylo to cache nie mialoby sensu.
bela
25.12.2005, 12:51:32
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.