Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> CacheSystem, Chciałbym abyście ocenili mój Cache System
Fifi209
post
Post #1





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


  1. <?php
  2. # autor: fifi209 (Fast)
  3.    # class: CacheSystem
  4.    # version: 1.02
  5.  
  6.    class CacheSystem {
  7.    
  8.        const COMPRESSION_NONE=0;
  9.        const COMPRESSION_BZIP2=1;
  10.        protected $dir;
  11.        private $compression;
  12.        
  13.        public function __construct($dir, $compression) {
  14.            if (@opendir($dir)) {
  15.                $this->dir = $dir;
  16.                switch ($compression) {
  17.                    case self::COMPRESSION_NONE:
  18.                        $this->compression = false;
  19.                        break;
  20.                    case self::COMPRESSION_BZIP2:
  21.                        $this->compression = true;
  22.                        break;
  23.                }
  24.            }else{
  25.                echo 'Podany katalog nie istnieje lub nie masz praw do jego otworzenia.';
  26.            }
  27.        }
  28.        
  29.        public function __get($cacheFile) {
  30.            if (file_exists($this->dir.'/'.$cacheFile.'.cache')) {
  31.                if ($this->compression == false) {
  32.                    return file_get_contents($this->dir.'/'.$cacheFile.'.cache');
  33.                }else{
  34.                    $handle = bzopen($this->dir.'/'.$cacheFile.'.cache', 'r');
  35.                    $text = bzread($handle, filesize($this->dir.'/'.$cacheFile.'.cache'));
  36.                    bzclose($handle);
  37.                    return $text;
  38.                }
  39.            }else{
  40.                return false;
  41.            }
  42.        }
  43.        
  44.        public function __set($cacheFile, $value) {
  45.            if ($this->compression == false) {
  46.                file_put_contents($this->dir.'/'.$cacheFile.'.cache', $value);
  47.                return true;
  48.            }else{
  49.                $handle = bzopen($this->dir.'/'.$cacheFile.'.cache', 'w');
  50.                bzwrite($handle, $value);
  51.                bzclose($handle);
  52.                return true;
  53.            }
  54.        }
  55.        
  56.        public function destroy($cacheFile) {
  57.            if ($this->$cacheFile != false) {
  58.                unlink($this->dir.'/'.$cacheFile.'.cache');
  59.                return true;
  60.            }else{
  61.                return false;
  62.            }
  63.        }
  64.        
  65.    }
  66. ?>


Napisałem ją dla siebie, ale może się komuś przyda. A teraz prosiłbym o jakieś uwagi dot. kodu, tj. co by można zmienić, zrobić inaczej.
Wydaje mi się, że jak na tą prostotę funkcjonalność jest wystarczająca. (przynajmniej dla mnie)

Użycie przykładowe:

Najpierw konstruktor:
  1. <?php
  2. $cache = new CacheSystem('cache', CacheSystem::COMPRESSION_NONE);
  3. ?>


Parametr pierwszy - ścieżka do folderu cache
Parametr drugi - używana kompresja (w tym wypadku brak, lecz "NONE" można zastąpić "BZIP2")

a) Dodawanie cache/Zmienianie jego wartości (konstruktor pomijam)
  1. <?php
  2. $cache->podstrona = 'Jakas wartosc';
  3. ?>


(IMG:http://forum.php.pl/style_emoticons/default/cool.gif) Odczyt cache
  1. <?php
  2. echo $cache->podstrona;
  3. ?>


c) Usuwanie cache
  1. <?php
  2. $cache->destroy('podstrona');
  3. ?>


podstrona -> nazwa pliku cache (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował fifi209 14.06.2009, 22:54:36
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kamil_biela
post
Post #2





Grupa: Zarejestrowani
Postów: 31
Pomógł: 7
Dołączył: 14.06.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Kesz który wymaga połączenia z bazą danych? Oczywiście są takie przypadki kiedy coś takiego się przyda, ale to dobre jako opcja.

Jeśli liczysz wydajność w liniach kodu to gratulacje...

I mógłbyś zacząć używać jakiś argumentów w dyskusji?

Jeśli wystawiasz coś do oceny, to spodziewaj się że wszyscy wytkną braki, co akurat jest lepsze od "och ach, ale słitaśna klasa".
Go to the top of the page
+Quote Post
Fifi209
post
Post #3





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(kamil_biela @ 14.06.2009, 12:27:08 ) *
Kesz który wymaga połączenia z bazą danych? Oczywiście są takie przypadki kiedy coś takiego się przyda, ale to dobre jako opcja.


A czemu nie? Dane są trzymane w pamięci, więc z tym problemów nie będzie. Zawsze można napisać inne rozszerzenie trzymające np. w xml
(pisałem to z myślą, że mi tego ramu nie braknie)

Cytat(kamil_biela @ 14.06.2009, 12:27:08 ) *
Jeśli liczysz wydajność w liniach kodu to gratulacje...

Na pewno, kod bez zbędnych pierdół będzie się szybciej parsował.

Cytat(kamil_biela @ 14.06.2009, 12:27:08 ) *
I mógłbyś zacząć używać jakiś argumentów w dyskusji?

Ja czekam na kolejne uwagi, co dodać/usunąć/zmienić.

Cytat(kamil_biela @ 14.06.2009, 12:27:08 ) *
Jeśli wystawiasz coś do oceny, to spodziewaj się że wszyscy wytkną braki, co akurat jest lepsze od "och ach, ale słitaśna klasa".


A czy ja oczekuję braw i oklasków? Napisałem na samym początku, że chciałbym wiedzieć czy coś trzeba zmienić etc.

P.S. Z miłą chęcią przeczytam propozycję dot. trzymania danych (czas życia cache)
[w mysql mogę robić wszystko hurtem]

Ten post edytował fifi209 14.06.2009, 11:36:45
Go to the top of the page
+Quote Post
kamil_biela
post
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 7
Dołączył: 14.06.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(fifi209 @ 14.06.2009, 12:32:24 ) *
A czemu nie? Dane są trzymane w pamięci, więc z tym problemów nie będzie. Zawsze można napisać inne rozszerzenie trzymające np. w xml


W keszu chodzi żeby ograniczać zużycie zasobów.
Hmm... xml - nie da to za dużego narzutu na parsowanie?

Cytat(fifi209 @ 14.06.2009, 12:32:24 ) *
Na pewno, kod bez zbędnych pierdół będzie się szybciej parsował.


Co nie znaczy że ogólnie będzie szybciej działał. A w cache lite nie ma pierdół (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

A czas życia możesz wyznaczać na podstawie daty utworzenia pliku.
Go to the top of the page
+Quote Post
Fifi209
post
Post #5





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(kamil_biela @ 14.06.2009, 12:45:57 ) *
A czas życia możesz wyznaczać na podstawie daty utworzenia pliku.


Tak chciałem zrobić, lecz co gdy będę chciał wydłużyć...? Usunąć plik i na nowo tworzyć?

Cytat(kamil_biela @ 14.06.2009, 12:45:57 ) *
W keszu chodzi żeby ograniczać zużycie zasobów.

I zamiast np. 10 połączeń z mysql i różnych operacji mam 0 połączeń lub ew. jedno (bo nie każdemu cache trzeba czas życia ustawiać)

Cytat(kamil_biela @ 14.06.2009, 12:45:57 ) *
Hmm... xml - nie da to za dużego narzutu na parsowanie?


Zależy jak dużo danych przewidujesz, ja przewiduję (u siebie) max 30 podstron, także parsowanie takiego xml nie byłoby problemem.
Poza tym, ja żyję w świecie na którym cały ram i czas procesora mam dla siebie.

Ten post edytował fifi209 14.06.2009, 11:51:11
Go to the top of the page
+Quote Post

Posty w temacie
- fifi209   CacheSystem   13.06.2009, 22:58:36
- - Moli   Zły dział. Jest dział do ocen. A co jak będę chci...   13.06.2009, 23:06:03
|- - fifi209   Cytat(Moli @ 14.06.2009, 00:06:03 ) Z...   13.06.2009, 23:11:50
- - kamil_biela   osobiście wolalbym pobierać/ustawia...   14.06.2009, 00:50:17
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 01:50...   14.06.2009, 01:06:46
|- - kamil_biela   Cytat(fifi209 @ 14.06.2009, 02:06:46 ...   14.06.2009, 01:18:10
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 02:18...   14.06.2009, 10:01:44
- - kamil_biela   Kesz który wymaga połączenia z bazą danych? Oczywi...   14.06.2009, 11:27:08
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 12:27...   14.06.2009, 11:32:24
|- - kamil_biela   Cytat(fifi209 @ 14.06.2009, 12:32:24 ...   14.06.2009, 11:45:57
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 12:45...   14.06.2009, 11:50:12
|- - kamil_biela   Cytat(fifi209 @ 14.06.2009, 12:50:12 ...   14.06.2009, 11:54:43
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 12:54...   14.06.2009, 12:09:04
- - kamil_biela   Trochę sprzeczne jest ze sobą to co mówisz. Z jedn...   14.06.2009, 12:12:54
- - fifi209   Cytat(kamil_biela @ 14.06.2009, 13:12...   14.06.2009, 22:08:47
- - kamil_biela   setXMLPath, to IMO powinno być w konstruktorze, z ...   14.06.2009, 22:23:31
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 23:23...   14.06.2009, 22:34:21
|- - kamil_biela   Cytat(fifi209 @ 14.06.2009, 23:34:21 ...   14.06.2009, 22:43:26
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 23:43...   14.06.2009, 22:56:27
- - erix   Cache'owanie + kompresja = zuo Poza tym, nie ...   15.06.2009, 10:01:28


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 06:39