Buforowanie danych w witrynie ASP.NET Web Pages (Razor) w celu uzyskania lepszej wydajności
– autor Tom FitzMacken
W tym artykule wyjaśniono, jak używać pomocnika do buforowania informacji w celu zwiększenia wydajności w witrynie internetowej ASP.NET Web Pages (Razor). Możesz przyspieszyć witrynę internetową, przechowując ją — czyli pamięć podręczną — wyniki danych, które zwykle wymagałyby znacznego czasu na pobranie lub przetworzenie i które nie zmieniają się często.
Czego się nauczysz:
- Jak używać buforowania, aby poprawić czas reakcji witryny internetowej.
Oto ASP.NET funkcje wprowadzone w artykule:
- Pomocnik
WebCache
.Wersje oprogramowania używane w samouczku
- ASP.NET Web Pages (Razor) 3
Ten samouczek działa również z ASP.NET Web Pages 2.
Za każdym razem, gdy ktoś zażąda strony z witryny, serwer internetowy musi wykonać pewną pracę, aby spełnić żądanie. W przypadku niektórych stron serwer może być musiał wykonywać zadania, które zajmują (stosunkowo) długi czas, na przykład pobieranie danych z bazy danych. Nawet jeśli te zadania nie zajmują dużo czasu, jeśli witryna doświadcza dużego ruchu, cała seria pojedynczych żądań, które powodują, że serwer internetowy wykonuje skomplikowane lub powolne zadanie, może zająć dużo pracy. Może to ostatecznie wpłynąć na wydajność witryny.
Jednym ze sposobów poprawy wydajności witryny internetowej w takich okolicznościach jest buforowanie danych. Jeśli witryna otrzymuje powtarzające się żądania dotyczące tych samych informacji, a informacje nie muszą być modyfikowane dla każdej osoby i nie jest ona wrażliwa na czas, zamiast ponownie pobierać lub ponownie je obliczać, możesz pobrać dane raz, a następnie zapisać wyniki. Następnym razem, gdy pojawi się żądanie dla tych informacji, po prostu wyjmiesz je z pamięci podręcznej.
Ogólnie rzecz biorąc, buforujesz informacje, które nie zmieniają się często. Umieszczenie informacji w pamięci podręcznej jest przechowywane w pamięci na serwerze internetowym. Możesz określić, jak długo ma być buforowany, od sekund do dni. Po wygaśnięciu okresu buforowania informacje są automatycznie usuwane z pamięci podręcznej.
Uwaga
Wpisy w pamięci podręcznej mogą zostać usunięte z powodów innych niż wygasły. Na przykład serwer internetowy może tymczasowo uruchomić mało pamięci, a jednym ze sposobów odzyskania pamięci jest wyrzucenie wpisów z pamięci podręcznej. Jak zobaczysz, nawet jeśli umieścisz informacje w pamięci podręcznej, musisz upewnić się, że są nadal tam, gdy są potrzebne.
Wyobraź sobie, że twoja witryna internetowa ma stronę, która wyświetla bieżącą temperaturę i prognozę pogody. Aby uzyskać informacje tego typu, możesz wysłać żądanie do usługi zewnętrznej. Ponieważ te informacje nie zmieniają się zbytnio (na przykład w okresie dwóch godzin), a ponieważ wywołania zewnętrzne wymagają czasu i przepustowości, jest to dobry kandydat do buforowania.
Dodawanie buforowania do strony
ASP.NET zawiera WebCache
pomocnika, który ułatwia dodawanie pamięci podręcznej do witryny i dodawanie danych do pamięci podręcznej. W tej procedurze utworzysz stronę, która buforuje bieżący czas. To nie jest rzeczywisty przykład, ponieważ bieżący czas jest czymś, co często się zmienia, i że nie jest to skomplikowane do obliczenia. Jednak dobrym sposobem jest zilustrowanie buforowania w działaniu.
Dodaj nową stronę o nazwie WebCache.cshtml do witryny internetowej.
Dodaj następujący kod i znaczniki do strony:
@{ var cacheItemKey = "CachedTime"; var cacheHit = true; var time = WebCache.Get(cacheItemKey); if (time == null) { cacheHit = false; } if (cacheHit == false) { time = @DateTime.Now; WebCache.Set(cacheItemKey, time, 1, false); } } <!DOCTYPE html> <html> <head> <title>WebCache Helper Sample</title> </head> <body> <div> @if (cacheHit) { @:Found the time data in the cache. } else { @:Did not find the time data in the cache. } </div> <div> This page was cached at @time. </div> </body> </html>
Podczas buforowania danych należy umieścić je w pamięci podręcznej przy użyciu nazwy, która jest unikatowa w całej witrynie internetowej. W takim przypadku użyjesz wpisu pamięci podręcznej o nazwie
CachedTime
. Jest to pokazanycacheItemKey
w przykładzie kodu.Kod najpierw odczytuje wpis pamięci podręcznej
CachedTime
. Jeśli zwracana jest wartość (oznacza to, że jeśli wpis pamięci podręcznej nie ma wartości null), kod po prostu ustawia wartość zmiennej czasowej na dane pamięci podręcznej.Jeśli jednak wpis pamięci podręcznej nie istnieje (oznacza to, że ma wartość null), kod ustawia wartość czasu, dodaje ją do pamięci podręcznej i ustawia wartość wygaśnięcia na minutę. Po jednej minucie wpis pamięci podręcznej zostanie odrzucony. (Domyślna wartość wygaśnięcia elementu w pamięci podręcznej wynosi 20 minut).
WebCache.Set(cacheItemKey, time, 1, false)
Polecenie pokazuje, jak dodać bieżącą wartość czasu do pamięci podręcznej i ustawić jej wygaśnięcie na 1 minutę. Ustawienie parametrufalse
slidingExpiration oznacza, że czas wygaśnięcia nie jest odnawiany za każdym razem, gdy jest żądany. Wygaśnie dokładnie 1 minutę po jej pierwotnie dodaniu do pamięci podręcznej. Jeśli ustawisz tę wartość natrue
1 minutę czasu wygaśnięcia jest resetowany za każdym razem, gdy wartość jest żądana z pamięci podręcznej.Ten kod ilustruje wzorzec, którego należy zawsze używać podczas buforowania danych. Przed wyjściem z pamięci podręcznej zawsze sprawdź, czy
WebCache.Get
metoda zwróciła wartość null. Pamiętaj, że wpis pamięci podręcznej mógł wygasnąć lub został usunięty z innego powodu, więc każdy dany wpis nigdy nie musi znajdować się w pamięci podręcznej.Uruchom plik WebCache.cshtml w przeglądarce. (Przed uruchomieniem strony upewnij się, że strona jest zaznaczona w obszarze roboczym Pliki ). Przy pierwszym żądaniu strony dane czasu nie są w pamięci podręcznej, a kod musi dodać wartość czasu do pamięci podręcznej.
Odśwież plik WebCache.cshtml w przeglądarce. Tym razem dane czasu są przechowywane w pamięci podręcznej. Zwróć uwagę, że czas nie zmienił się od czasu ostatniego wyświetlenia strony.
Poczekaj minutę na opróżnienie pamięci podręcznej, a następnie odśwież stronę. Strona ponownie wskazuje, że dane czasu nie zostały znalezione w pamięci podręcznej, a zaktualizowany czas jest dodawany do pamięci podręcznej.