Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Generowanie listy najnowszych pozycji?, Jak i kiedy tworzyć CACHE?
WebCM
post 21.09.2008, 18:32:48
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Chcę wyświetlić listę najnowszych pozycji. Jest 5 typów kategorii: artykuły, pliki, zdjęcia, linki i nowości (każdy typ przechowywany w osobnej tabeli w bazie danych).

Generowanie listy przy każdym odświeżeniu strony może trochę spowolnić skrypt. Przecież można zrobić to raz, a potem wczytywać gotowy fragment kodu HTML!

Zastanawiam się, w jaki sposób tworzyć cache, a właściwie KIEDY. Podczas edycji każdego elementu?

Problem w tym, że system CMS musi obsługiwać wiele języków. Już myślałem, że pobiorę wszystkie najnowsze pozycje (5 zapytań, bo jest 5 typów), przypiszę kod do tablic typu $kod[$jezyk] lub $kod['wszystkie'], a potem zapiszę go do plików - dla każdego języka (po złączeniu tablic, np. $kod['PL'] i $kod['wszystkie']). Jednak to nie takie proste...

Przeczytajcie: http://www.unit1.pl/pb-887

Jak rozwiązać ten problem?


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
zimi
post 21.09.2008, 23:02:51
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


generalnie z cache'm jakiegokolwiek rodzaju się specjalnie nie bawiłem ale zawsze w mojej świadomości widniało ujęcie problemu w taki sposób:
- przy zmianie bazy, deaktualizujesz cache
- przy renderowaniu strony sprawdzasz czy jest, jeśli go nie ma lub jest zdeaktualizowany to tworzysz a zawartość wysyłasz

Ten post edytował zimi 21.09.2008, 23:03:33
Go to the top of the page
+Quote Post
AxZx
post 22.09.2008, 00:37:06
Post #3





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


Cytat(zimi @ 22.09.2008, 00:02:51 ) *
- przy renderowaniu strony sprawdzasz czy jest, jeśli go nie ma lub jest zdeaktualizowany to tworzysz a zawartość wysyłasz


a jak sprawdzasz czy jest zdeaktualizowany ?smile.gif


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
zimi
post 22.09.2008, 10:00:12
Post #4





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


Napisałem że ja się za bardzo nie bawiłem z cache-m, moje aplikacje do tej pory nie wymagały takiego rozwiązania
Zatem pytanie jak sprawdzam nie znajdzie swojej odpowiedzi bo jeszcze tego nie robie...
uczę się symfony, przy niej będę robił cache-owanie i jeszcze pewnie kilka innych rzeczy... które w aplikacjach robić się powinno (testy jednostkowe, etc.)

jednak jeśli chodzi o to jakbym to zrobił
deaktualizacja wiążę się bezpośrednio z faktem że plik jest nam do niczego nie potrzebny (przynajmniej tak mi się wydaję) więc deaktualizacja może być po prostu wyrzuceniem pliku, a wtedy sprawdzenie czy cache jest aktualny to po prostu sprawdzenie czy plik istnieje, może się przydać na przykład deaktualizacja co jakiś czas, na tym forum np. odświeżanie ilości odwiedzeń profilu co godzinę... jeśli chcemy coś takiego sprawdzamy datę modyfikacji etc...

Każdy cache przechowujemy oczywiście w osobnym pliku, takie było moje założenie

PS. specem nie jestem ale jeszcze nikt mnie nie skrytykował smile.gif więc rozwiązanie chyba ma ręcę i nogi smile.gif
Go to the top of the page
+Quote Post
delfinium
post 22.09.2008, 11:11:05
Post #5





Grupa: Zarejestrowani
Postów: 90
Pomógł: 6
Dołączył: 30.06.2007
Skąd: Zielona Góra

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


Deaktualizacja cache z reguły odbywa się na dwa sposoby. 1 - jeśli zmieni się coś w bazie 2 - upłynie określony czas. Z odświeżaniem cache z pkt 1 jest więcej problemu, bo trzeba uwzględnić wszystkie pliki w których te dane mogły się znaleźć ale do tego celu stosuje się np. tagi - kiedy tworzysz cache nadajesz mu odpowiednie tagi i potem usuwasz wszystko jak leci co zawiera dany tag - tak ma np. Zend. Pkt 2 jest prostszy bo sprawdzasz datę utworzenia pliku z cachem i jeśli jest większa od określonej to usuwasz i generujesz cache na nowo.
Go to the top of the page
+Quote Post
mario_salsa
post 22.09.2008, 13:18:18
Post #6





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 24.03.2007

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


Ja tworze pliki cache podczas aktualzacji baz danych
pliki te maja strukture tablic wiec korzystanie z nich jest bardzo podobne jak do stosowania zapytan (gdzie tez z reguly otrzymujemy tablice).


--------------------
Salsainfo.pl
Go to the top of the page
+Quote Post
WebCM
post 23.09.2008, 16:04:04
Post #7





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Twórz cache co X minut
Z odświeżaniem cache do X minut nie ma problemu. W przypadku stron o dużym ruchu, na których nowe elementy pojawiają się średnio raz na dzień, takie rozwiązanie jest raczej nieopłacalne. W przypadku częstych zmian - lista może zaktualizować się nawet po X minutach, więc przez X minut nie będzie aktualna.

Dezaktualizuj cache
Nie wiem, czy usuwanie plików (po każdej zmianie) i tworzenie ich ponownie (gdy trzeba wyświetlić listę) to dobry pomysł, szczególnie że trzeba usunąć tyle plików, ile jest języków.

Aktualizacja cache przy każdej zmianie
To wg mnie najlepszy pomysł, ale gorzej z wykonaniem. Jak już wyjaśniłem, trzeba utworzyć cache dla każdego języka. Zakładając, że istnieje 5 typów kategorii i 3 języki, trzeba wykonać 15 zapytań, chyba że zastosujemy inne konstrukcje SQL, aby osiągnąć cel - tylko jakie? Więcej informacji: http://www.unit1.pl/pb-887

Cytat
kiedy tworzysz cache nadajesz mu odpowiednie tagi i potem usuwasz wszystko jak leci co zawiera dany tag
Możesz wyjaśnić więcej? Chodzi o to, aby w pliku konfiguracyjnym zaznaczyć, że cache jest nieaktualny i trzeba go przebudować? Chyba że dodatkowy plik posłużyłby jako wskaźnik - jeśli jego data jest większa od daty cache...


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
nospor
post 23.09.2008, 17:16:22
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Nie wiem, czy usuwanie plików (po każdej zmianie) i tworzenie ich ponownie (gdy trzeba wyświetlić listę) to dobry pomysł, szczególnie że trzeba usunąć tyle plików, ile jest języków.
Moim zdaniem to jest właśnie dobre rozwiązanie.
Co ci szkodzi usunąć 5 plików? Przeciez jak dodasz aktualnosc to musisz wyczyscic tylko cache aktualnosci.

Proponuje takie rozwiązanie (opieram się w opisie na mojej klasie - jest w podpisie):
Pobierasz aktualnosci z danego jezyka (np. pl). Patrzysz czy jest w cache obiekt aktualnosci_pl.
Jest? - to go wyswietlasz.
Nie ma? to go tworzysz. przypisujesz go do kategori aktualnosci i wyswietlasz to co stworzyles.
Analogicznie postepujesz dla innego jezyka i dla innych typow.

Teraz zmieniasz cos w aktualnosciach. Czyscisz wiec caly cache z kategorii aktualnosci i juz sie o nic nie martwisz. Wszystko zbuduje sie samo, gdy będzie ktos chcial to wyswietlic


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.06.2025 - 06:17