Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pisanie wydajnego i wygodnego forum
Forum PHP.pl > Forum > PHP
Armano
Jestem w trakcje pisania modułu do cms'a którym ma być forum i napotkałem jeden czysto teoretyczny problem:

Śledzenie tego czy user odwiedził już dany topic. Z racji tego że całość m być jak najbardziej lekka doszedłem do pewnego rozwiązania lecz nie jestem pewien czy uznacie jest dobre, całość postaram się przedstawić jak najbardziej zrozumiale:

  1. Wszystkie dane o odwiedzonych podstronach będą przechowywane w dwóch miejscach cookies i db
  2. Tabela w bazie danych będzie się składać z 3 pól user_id topic_id time
  3. Po odwiedzeniu Posta wysyłane będą do bazy dane o tym (o ile user jest zalogowany) informacje że topic został przeczytany, dodatkowo by ograniczyć ruch związany z bazą danych sprawdzane będą tylko dane z ciastek i na podstawie tego będzie określane czy powinno wykonać aktualizację stanu.
  4. Obsługa ciastek (w tym zmiana ikonki stanu) będzie wykonywana z poziomu JS


Napotkałem kilka drobnych problemów co gdy user przeloguje sie na inne konto? na którym ma zaznaczone posty jako nie przeczytane? czy to rozwiązanie jest dobre czy nie? a moze dobre tylko dla niezalogowanych userów?

jak sprawdzić czy user ma nieprzeczytane posty w kategorii a nie chce listować wszystkich...

Czy może wydajniej będzie sprawdzać dane z DB?
ps. Jeśli nie masz zdania nie pisz tutaj nie lubię spamu, floodu itd..
by_ikar
Nie przechowuj informacji na temat daty ostatniej wizyty w ciastku, w ciastku przechowuj ID sesji a to kiedy ostatni raz user był zalogowany przechowuj w sesji, wtedy przelogowanie na inne konto nie będzie stanowić jakiegoś problemu. W sumie możesz te ciastko niszczyć przy wylogowaniu, lub niszczyć nawet przed samym logowaniem.

Generalnie z tego co się orientuje są 2 metody na wyróżnienie wątków/postów których user nie przeczytał:

- tak jak ty robisz, czyli porównywanie powiedzmy ostatniej daty aktualizacji wątku, z datą ostatniej wizyty usera
- tabela w której są przechowywane informacje na o nie przeczytanych wątkach/postach dla każdego usera z osobna

obie metody nie są idealne, jedna średnio dobrze sprawdza się podczas aktualizacji czasu ostatniej wizyty usera, druga pochłania spore ilości miejsca w bazie. Dlatego trzeba wybierać co będzie bardziej nam odpowiadać.
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.