2010-05-30 10 views
5

Wyobraźmy sobie następującą sprawę zastosowanie:Nagłówki HTTP: Ostatnia modyfikacja - w jaki sposób może naśladować obciążenie serwera?

używam żądania AJAX dla coraz kilka informacji o Item i korzystanie z tego adresu: http://domain/items/show/1

W mojej bazy danych wszystkie elementy mają pole o nazwie modified_at gdzie możemy przechowywać moment, kiedy to element został wcześniej zmodyfikowany.

W jaki sposóbnagłówek HTTP serwera w odpowiedzi może zminimalizować obciążenie/zmniejszyć żądania/zwiększyć czas reakcji, jeśli zajdzie potrzeba przetworzenia tego żądania za każdym razem po stronie serwera? Wygląda na to, że nie zmniejszamy liczby żądań HTTP z tą odpowiedzią i nie zmniejszamy obciążenia serwera.

Kto i tak potrzebuje?

Mam rację, że jest używany głównie w celu oszczędzania przepustowości?

Odpowiedz

3

Celem jest zaoszczędzenie przepustowości, nie na serwerze, ale na kliencie. Nieakceptowalne żądania AJAX prawdopodobnie spowodują, że interfejs użytkownika stanie się niewiarygodnie powolny dla użytkowników, a nie konieczność przesyłania danych w kółko drastycznie poprawia wydajność w przeglądarce klienta.

Aby zmniejszyć liczbę żądań, należy ustawić jawny nagłówek Expires w odpowiedzi. Klient nie zażąda zasobu, dopóki nie upłynie czas określony przez Expires.

1

Jeśli twoja implementacja zawsze będzie wymagać zapytania bazy danych, szanse wdrożenia 304 nie przyniosą zbyt wiele dobrego. Możesz tylko oszczędzać zasoby wymagane do renderowania odpowiedzi. Jeśli renderowanie będzie wymagać dużego przetwarzania, może być ono warte jego zachowania, nawet jeśli potrzebujesz zapytania db.

Jeśli jednak masz mechanizm mapowania żądania uri na datę wygaśnięcia bez użycia bazy danych, możesz zauważyć większą poprawę czasów odpowiedzi i zapisanych zasobów serwera.

Sposób implementacji podobnego scenariusza polegał na buforowaniu każdego żądania na dysk. Pierwszy wiersz w pliku (nazwany w sposób, który nie wymaga skanowania) zawiera metadane, takie jak etag i ttl. Opierając się na zmodyfikowanym czasie przechowywania pliku i przechowywanej w nim ttl, mogę, odczytując tylko jedną linię z dysku, zdecydować, czy powinienem wysłać odpowiedź 304 (powracający klient), zawartość pliku pamięci podręcznej (nowy klient, lub powracający klient, który nie widział ostatnio renderowania) lub przetwarza żądanie zwykle buforując odświeżony wynik w tym samym czasie.

Zobacz to pytanie, aby uzyskać więcej informacji na temat wdrażania 304 odpowiedzi. Is my implementation of HTTP Conditional Get answers in PHP is OK?

Powiązane problemy