Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System cachowania
Forum PHP.pl > Forum > PHP
Fifi209
Ostatnio zacząłem się interesować systemem cachowania, gdyż niektóre elementy na mojej stronie długo się generują.

Ja wymyśliłem coś takiego:

  1. <?php
  2. function CacheCreate($name, $text) {
  3.        $file = bzopen('cache/'.$name.'.cache', 'w');
  4.        bzwrite($file, $text);
  5.        bzclose($file);
  6.        return $text;
  7.    }
  8.    
  9.    function CacheOpen($name) {
  10.        if (file_exists('cache/'.$name.'.cache')) {
  11.            $file = bzopen('cache/'.$name.'.cache', 'r');
  12.            $text = bzread($file, filesize('cache/'.$name.'.cache'));
  13.            bzclose($file);
  14.            return $text;
  15.        }else{
  16.            return FALSE;
  17.        }
  18.    }
  19. ?>


I do testów użyłem:
  1. <?php
  2. if (($_GET['name']) && ($_GET['text'])) {
  3.        $cache = CacheOpen($_GET['name']);
  4.        if ($cache == FALSE) {
  5.            echo CacheCreate($_GET['name'], $_GET['text']);
  6.        }else{
  7.            echo 'Wczytane z pliku.<br/>'.$cache;
  8.        }
  9.    }
  10. ?>



Proste, funkcjonalne. Tylko czy szybkie? Na pewno wykonuje się szybciej niż generują się dane.
Jak wygląda sprawa z kompresją? (Czy dobrym pomysłem jest jej zastosowanie)

Myślałem, aby dane wrzucić do wielowymiarowej tablicy i potraktować serialize" title="Zobacz w manualu PHP" target="_manual a przy odczycie z powrotem do tablicy unserialize" title="Zobacz w manualu PHP" target="_manual

Jak Wy to widzicie?



P.S. Jak najlepiej mierzyć czas wykonywania skryptu?
(Pomysły na to, które widziałem to zapisanie czasu na początku i na końcu odejmowanie + wyświetlenie)
Fifi209
Cytat(belliash @ 11.06.2009, 09:43:29 ) *
ja poprostu zapisuje w pliku $value = .................
wystarczy include i mamy w skrypcie $value ktory posiada to co nam potrzeba... chyba najbardziej trywialne rozwiazanie...


Tak, ale mi chodzi aby zaoszczędzić miejsce na dysku. haha.gif

Zrobiłem taki test:
Plik testowy bez kompresji bzip2: 116KB
Po kompresji bzip2: 2KB

Różnica jest i to spora.

Cytat(belliash @ 11.06.2009, 09:43:29 ) *
Czas z konca - czas z poczatku jest IMHO the best winksmiley.jpg


Tak, ale do czasu doliczone są również te operacje. haha.gif
Chyba będę musiał przy tym zostać... ;d

Kolejny test:
Strona na której pobieram dane z mysql (około 100 wyników)
Czas wykonania skryptu: 0.01926 sekund(y)

Te same dane z cache: 0.00145 sekund(y)

Pomimo kompresji, znacznie szybciej odczytuje z cache.

Kolejny test:
Dane z mysql: 0.67112 sekund(y)
Dane z cache: 0.02267 sekund(y)

(Troszkę większa ilość danych i jakie różnice na korzyść cache)
Fifi209
Cytat(belliash @ 11.06.2009, 10:44:22 ) *
Wiec po co ten watek? Pytasz czy szybkie? Robisz testy i....... roznice widac golym okiem.... wiec w czym tu problem?
Cache dziala tak jak powinien... masz zaoszczedzony czas i miejsce na dysku o co jeszcze chodzi?
Mozesz pomyslec nad stopniem kompresji... lepsza kompresja - wolniej, gorsza - szybciej... znajdziesz jakis kompromis...

poza tym cache ma jakis TTL... wiec nie kompresujesz tego co wywolanie strony... a dekompresja jak widzisz przebiega kilkukrotnie szybciej....


Głównie chodziło mi o to jak Wy to robicie.

I czy zastosowanie kompresji jest dobrym pomysłem (jeżeli chodzi o szybkość)
Czy dane lepiej zapisywać jako tekst czy jako zserializowaną tablicę?
Fifi209
Cytat(belliash @ 11.06.2009, 11:21:39 ) *
myslisz ze ktos przeprowadzal takie testy?
zrobiles sobie benchmarka... pokombinuj, posprawdzaj ktore szybsze...


Nie tyle co myślę, a liczyłem na to. Wiesz nie mogę przetestować działania przy dużym ruchu bo go po prostu nie wyczaruję...
seth-kk
zapisuj pliki w postaci
  1. <?php
  2. return array('index'=>'value', 'index2'=>'value2');
  3. ?>

i masz serializacje z glowy (tylko pamietaj o addslashes() lub czyms podobnym)
co do kompresji - skoro celem jest przyspieszenie ladowania strony to jest ona zbedna - przeciez przestrzen dyskowa nie jest towarem ekskluzywnym (a przynajmniej w takich ilosciach)
erix
Cytat
Głównie chodziło mi o to jak Wy to robicie.

serialize" title="Zobacz w manualu PHP" target="_manual jest najszybsze w parsowaniu, jeśli chodzi o pliki (co ciekawe, szybsze niż var_export" title="Zobacz w manualu PHP" target="_manual).

Chyba o tym, że kompresja cache'u jest fatalnym pomysłem, nie muszę wspominać. Masz odciążyć serwer, a nie go jeszcze dobijać.

Jeśli potrzebny jest wyższy kaliber - cache z akceleratora (eAccelerator coś takiego umożliwia), APC, potem shm, memcached, jest tego nawet sporo. ;]
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.