Technologie i narzędzia: język PHP 5, Java, JavaScript, Python, system Zend Framework, Django, biblioteka jQuery, Smarty, platforma Eclipse, MySQL, SVN, CVS, UML, Firefox.
WebProgramming - wszystko o serwisach internetowych
O serwisach internetowych.
[wydajność] Sposoby cachowania strony (aktualizacja)
Cachowanie to jeden ze sposóbów przyspieszenia działania serwisu internetowego (i tym samym zwiększenia jego wydajności). Jest to jednak bardzo ogólne pojęcie, ponieważ jego realizacja może dotyczyć różnych warstw serwisu zaczynając od bazy danych a kończąc na przeglądarce.
Co to jest cache?
Wg definicji Wikipedii to mechanizm, w którym ostatnio pobierane dane dostępne ze źródła o długim czasie dostępu (przyt. autora) i niższej przepustowości są przechowywane w pamięci o lepszych parametrach (oryginał).
W przypadku serwisów internetowych najbardziej popularnymi technikami cachowania są:
- Cachowanie wynikow bazy danych.
Oczywiście dotyczy to tylko zapytań typu SELECT, przy każdym zapytaniu system może zapisywać w pliku wynik (np serializowaną tablicę), dzięki czemu zmniejszymy liczbę zapytań do bazy danych. - Cachowanie generowania widoku - akcji (zapisuje HTML na dysku)
W tym przypadku idziemy o krok dalej i zapisujemy całą (lub fragment) strony HTML, dzięki czemu przyspieszenie może być większe niż w punkcie 1 (oprócz braku dostępu do bazy danych, oszczędzamy na samym generowaniu widoku). Niestety jest jeszcze trudniej określić “termin ważności” cachu. - Cachowanie strony za pomocą nagłówków (cache przeglądarki):
- Prosty przykład nagłówków dla cachowania:
Cache-Control: cache, must-revalidate
Pragma: public
Expires: Wed, 21 Nov 2007 10:00:14 GMTPowoduje zapisywanie strony do cache (zarówno przez przeglądarki jak i proxy) na okres 1 dnia.
Podpowiedź: aby wygenerować czas GMT w PHP użyj funkcji: gmdate(’D, d M Y H:i:s’, time() + 86400)W omawianym przykładzie można również użyć dyrektywy
Cache-Control: max-age=86400, must-revalidate
Wówczas nagłówek Expires jest zbędny (czas jest liczony od czasu żądania). - Do kontrolowania cachowania służą również nagłówki: Last-Modified, Etag.
Pierwszy z nich określa datę ostatniej modyfikacji danej strony (przy zapytaniu takiej strony przeglądarka wysyła nagłówek If-Modified-Since), natomiast drugi jest “znacznikiem” pliku - dla każdej zmiany pliku znacznik powinien być inny (wtedy przy żądaniu przeglądarka wysyła nagłówek If-None-Match).
W obu przypadkach nagłówki te są często generowane automatycznie przez serwer, jeżeli żądany jest statyczny zasób (np strona HTML). Nagłówek Etag jest generowany na podstawie czasu modyfikacji, wielkości pliku oraz i-node (zależne jest to od konfiguracji - dla serwera Apache http://httpd.apache.org/docs/2.0/mod/core.html#fileetag) i może przyjmować następującą formę “14d9-4725dc49-1174c97″.
Uwaga: jezeli serwis jest oparty na klastrze (kilku serwerów) nie warto wybierać opcji, która generuje Etag na podstawie i-node, ponieważ strona może być pobierana kilkakrotnie - dla każdego systemu plików i-node jest inny i tym samym dla tej samej strony będzie inny Etag.
- Prosty przykład nagłówków dla cachowania:
Idea działania cachowania we wszystkich powyższych przypadkach jest podobna - system sprawdza, czy na żądanie istnieją dane w cachu oraz czy nie są “przeterminowane”. Jeżeli wszystko jest okej system zwraca je, w przeciwnym przypadku pobiera dane jeszcze raz i zapisuje do cache oraz zwraca wynik. Zmienia się natomiast sam system, który tym steruje - w przypadku 1 i 2 jest to odpowiednia warstwa aplikacji webowej, w przypadku 3 jest nim przeglądarka (sterowana za pomocą nagłówków przez aplikacje webową).Również problemy są takie same, a w śród nich największy - ważność danych. Musimy zwracać baczną uwagę na częstotliwość odświeżania danych w cachu, aby użytkownik końcowy otrzymywał zawsze aktualne dane. Niestety to jest największa trudność, ponieważ zazwyczaj zależy to od różnych czynników i jest trudne do określenia.
1 Komentarz to “[wydajność] Sposoby cachowania strony (aktualizacja)”
Napisz komentarz
Techniczna sprawa.
Czemu dodajesz wpisy jako admin a nie szymon;) Nie powinno sie pracowac jako admin/root nie uczyli w szkole:)
W czytniku rss mam cos takiego
[wydajność] Sposoby cachowania strony?
from WebProgramming - blog programisty by admin