Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [framework]Jakie cache lepsze.
Forum PHP.pl > Forum > PHP
Moli
Pisząc frameworka, zacząłem się zastanawiać, nad rozwiązaniem cache. Czy lepszym sposobem będzie cachowanie wyników z bazy(cache w klasie SQL) czy sposób z CodeIgniter, cachowanie całej metody (ob_get_content()).

Który sposób będzie lepszy/szybszy ?
sf
Osobiście preferuje cachowanie poszczególnych elementów lub całych stron. Zyskujemy tutaj jeszcze na czasie, ponieważ nie musimy generować strony, od razu wysyłamy plik z gotową stroną.
dr_bonzo
Cytat
Osobiście preferuje cachowanie poszczególnych elementów lub całych stron. Zyskujemy tutaj jeszcze na czasie, ponieważ nie musimy generować strony, od razu wysyłamy plik z gotową stroną.

O ile da sie taki fragment z cache'owac -- bo np jak mamy w nim dane uzaleznione od usera go przegladajacego to tak latwo nie bedzie (ew. mozna dla kazdego usera cache tworzyc)
pink
Cytat(sf @ 1.09.2007, 14:40:55 ) *
Osobiście preferuje cachowanie poszczególnych elementów lub całych stron. Zyskujemy tutaj jeszcze na czasie, ponieważ nie musimy generować strony, od razu wysyłamy plik z gotową stroną.


IMO cachowanie powinno być trasparentne i niskopoziomowe. Gównym elementem wpływającym na czas generowania strony i obciążenie serwera są zapytania SQL, ewentualnie żądania SOAP. Ja preferuję cachowanie wyników zapytań via memcache. Dodatkowo przydatne może być uaktywnienie natywnego cache (qcache) w mysql. Trzeba jedynie robić to z głową, bo nie każde zapytanie powinni być cachowane.

Cachowanie całych stron nie jest efektywne - cachowana strona zabiera o wiele więcej miejsca w cache niż wynik zapytania, zatem przetworzenie jej (zczytanie, deserializacja) może okazać sie o wiele bardziej czaso/zasobożerne. Pozatym to żródło potencjalnych kłopotów.
dr_bonzo
Cytat
Cachowanie całych stron nie jest efektywne - cachowana strona zabiera o wiele więcej miejsca w cache niż wynik zapytania, zatem przetworzenie jej (zczytanie, deserializacja) może okazać sie o wiele bardziej czaso/zasobożerne. Pozatym to żródło potencjalnych kłopotów.

No i powiesz mi ze serwowanie dynamicznej tresci jest szybsze niz samego pliku z HTMLem?
Poza tym moze (tzn jest to OK) zajmowac wiecej miejsca, bo chodzi nam o oszczedzenie mocy CPU (minimalizacja czasu uzyskania strony) kosztem zajmowania miejsca.
nrm
ja preferuje cache samego sqla, tym bardziej, że z danego cache korzystam w n-tu miejscach serwisu, cache strony nie ma dla mnie najmniejszego sensu (w moich przypadkach, bo czasem zdarza się skeszować całe strony).
pink
Cytat(dr_bonzo @ 2.09.2007, 14:50:41 ) *
No i powiesz mi ze serwowanie dynamicznej tresci jest szybsze niz samego pliku z HTMLem?


Nie zrozumieliśmy się chyba, ja mówię o cachowaniu z uzyciem memcache. Operacja odczytu sporej ilości danych zajmie tyle samo czasu co przeparsowanie tego via PHP. Cachowanie stron jako gotowe HTMLe jest oczywiście wydajniejsze - ale realizowalne w bardzo znikomej ilośc projektów, spróbuj cachować stronę forum np, gdzie kazdemu użytkownikowi musisz wygenerować inny zestaw znacznikników nowych postów, etc.

Cytat(dr_bonzo @ 2.09.2007, 14:50:41 ) *
Poza tym moze (tzn jest to OK) zajmowac wiecej miejsca, bo chodzi nam o oszczedzenie mocy CPU (minimalizacja czasu uzyskania strony) kosztem zajmowania miejsca.


Po prawdzie to przypuszczam iż serwowania htmla będzie co najwyżej 30% szybsze niż zaserwowanie pliku PHP robiącego wyłacznie echo. Jak napisałem - najwiekszym problemem są zapytania SQL - one zajmują (via serwer MySQL) najwięcej czasu jak i mocy procesora. Parsowanie nawet bardzo skomplikowanego kodu nie jest aż tak zasobożerne. Tak więc cachowanie samych zapytań jest wystarczającą metodą optymalizacji dla stron których nie można cachować w całości.
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.