Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Automatyczne odświeżanie, a wydajność.
Forum PHP.pl > Forum > PHP
Jawor
Witam,

Od pewnego czasu zastanawia mnie pewne zagadnienie.
Mianowicie jak realizowane jest automatyczne odświeżanie np. tablicy na Facebooku.
Jeżeli ktoś doda wiadomość, niemal natychmiast pokazuje się ona u nas.
Jedyne rozwiązanie jakie mi przychodzi do głowy to skrypt JS, który sprawdza czy są nowe wiadomości i ew. je pobiera.
Z teoretycznego punktu widzenia, problem rozwiązany, lecz co z wydajnością? Co sekundę odpytywać bazę byłoby zabójcze, więc zapewne trzeba operować cachem.
Może ktoś tworzył coś podobnego i podzieli się informacjami?

Pozdrawiam
Jawor
IceManSpy
Na pewno działa tutaj AJAX, aby pobierać / wysyłać dane asynchronicznie. Cache na pewno przyda się jako dodatek. A reszta to porządne maszyny i łącza smile.gif
Zobacz, ile osób na tym siedzi. Każda zmiana podstrony na FB to kolejne żądania => nowe dane pobrane / wysłane, więc na pewno zapytania muszą mieć zoptymalizowane i jak napisałem wcześniej - sprzęt i łącza.
erix
Cytat
Z teoretycznego punktu widzenia, problem rozwiązany, lecz co z wydajnością? Co sekundę odpytywać bazę byłoby zabójcze, więc zapewne trzeba operować cachem.
Może ktoś tworzył coś podobnego i podzieli się informacjami?

Nie grzebałem nigdy w źródłach FB, ale było coś takiego, jak COMET.

Ale prawie nigdzie to nie działa, więc zostaje częste odpytywanie serwera.
markonix
Zapytanie co sekundę nie brzmi jeszcze tak strasznie.
Ważne aby to było optymalne zapytanie np. pobierające wyłącznie ostatnie ID wiadomości i tu dopiero następuje porównanie ID aktualnego z "nowym" i pobranie większej porcji danych (tekst, autor, data itp). Oczywiście jeśli przewidujemy dosyć częste aktualizacje to można pobierać od razu cały wiersz (zastąpić 2 zapytania jednym).
CuteOne
Poczytaj o node.js smile.gif sam ostatnio się nim bawię i śmiem twierdzić, że w połączeniu z WebSocketami (gdy tylko wszystkie przeglądarki go zaimplementują) będzie najlepszym rozwiązaniem do tego typu zadań. A na razie zostaje bawić się AJAXem lub łączyć JS z Flashem
by_ikar
Może to też być jedno zapytanie, dla wielu elementów, nie jednego konkretnego, bo wtedy powstałoby wiele równoległych zapytań dla każdego elementu z osobna, a tak powstaje powiedzmy co sekundę jedno zapytanie które zwraca elementy nadpisane, a skrypt aktualizuje tylko te elementy które zostały zaktualizowane. Niech istnieje przykładowo jedna tabelka dla danego usera który jest online w której będą trzymane informacje, które się zmieniły w trakcie jego pobytu na stronie, do tego odpowiednie triggery które aktualizują tą tabelkę jeżeli zostanie inna zaktualizowana i można dość wiele rzeczy w ten sposób zrobić. Przynajmniej ja tak to widzę, nie wiem jak to jest na fb rozwiązane dokładnie.

Dokładnie tak jak wyżej koledzy piszą, konkretne maszyny, zwykły serwer współdzielony wymiękłby przy kilkunastu użytkownikach online. Dlatego takie możliwości nie są dla wszystkich.
CuteOne
Chyba nie doceniasz PHP wink.gif kilkunastu użytkowników to żadne obciążenie. Patrz na duże serwisy gdzie serwer odpytywany jest praktycznie non-stop a serwis jakoś nie pada smile.gif Pamiętaj, że poza zwykłym odpytywaniem serwera co sekundę wymyślono również inne "mechanizmy", które w znacznym stopniu odciążają serwer
kamil_biela
I tak zwykle serwisy wykładają się na problemach z wydajnascią bazy danych a nie na języku który je obsługuje. No chyba, że ktoś coś potwornie zepsuł wink.gif.
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.