System.Text.Encoding
, będące predefiniowanymi sposobami kodowania w różnych popularnych (wszelkie odmiany PHP, zgodnie z założeniami, wykonywany jest w całości za każdym razem, gdy uruchomiony jest skrypt strony (pomijam różne dziwne sztuczki czynione z serwerem). Czyli (w wielkim skrócie): skrypt jest ładowany, skrypt jest wykonywany, wynik jest wypluwany przez serwer HTTP prosto do łączącego się klienta. I tak za każdym razem. W efekcie - każdorazowo takie operacje, jak połączenie z bazą danych, wczytywanie danych itp. muszą być wykonywane dla każdego (z grubsza) odwołania do skryptu. Jest to elastyczne i niezawodne - fakt; jednak wydajność aplikacji webowej znacznie na tym cierpi.
ASP.NET nie jest zbiorem skryptów, a aplikacją-pluginem serwera HTTP. Jak każda aplikacja - jest wczytywana, uruchamiana, działa, jest zamykana. Podstawowa różnica między PHP i ASP.NET jest jednak taka, że uruchomienie następuje raz, a następnie aplikacja po prostu działa, zwracając coraz to kolejne strony. Dzięki temu zabiegowi programista, tworząc statyczne pole klasy, może zainicjalizować je raz - przy uruchamianiu aplikacji; następnie korzysta z jednej i tej samej instancji, dopóki proces strony z jakiegoś powodu nie zostanie zatrzymany.
Mało tego - jeśli aplikacja posiada zdefiniowany plik
Global.asax
(rozszerzenie klasy aplikacji ASP.NET), może napisać własne funkcje wykonywane przy uruchamianiu i zatrzymywaniu aplikacji serwerowej. Pozwala to na sporą ilość sztuczek optymalizacyjnych - zaczynając od wczytania z dysku najczęściej używanych danych, aby udostępniać je poszczególnym modułom z pamięci RAM, z pominięciem np. parsowania XML. Dodatkowo, to samo rozszerzenie może (a nawet powinno) obsługiwać kod odpowiedzialny za rozpoczęcie i zakończenie sesji użytkownika, pozwalając również zapisać je w statycznym/globalnym kontenerze serwerowym.Osoby, które piszą w PHP raczej nie polubią tego rozwiązania - uzależnia w pewien sposób wykonanie skryptu od tego, czy i jak dawno aplikacja webowa została uruchomiona (a uwierzcie, IIS7 czyni cuda z uruchamianiem/zatrzymywaniem obecnych tam aplikacji). Jednak dla kogoś, kto przechodzi do tworzenia stron z aplikacji mobilnych/desktopowych, takie rozwiązanie jest zdecydowanie wygodniejsze, bardziej intuicyjne i prostsze. W końcu czym innym jest
HTTP Request
, jak nie wywołaniem funkcji przetwarzającej zapytanie na odpowiedź? W tym wypadku - funkcji korzystającej z wczytanych już danych.Jak wykorzystuję zmienne statyczne u siebie? Znalazłem przynajmniej kilka zastosowań, które powinny znacznie ułatwić i przyspieszyć działanie mojego bloga - przede wszystkim kosztem pamięci. Dodatkowo, aby przy rezygnacji z bazy danych na rzecz "wolnych XMLi" wydajność była niezerowa, buforowanie danych dyskowych w RAMie jest niezbędne. Oto zastosowania:
- przechowywanie konfiguracji bloga, włącznie z często używanymi, redefiniowalnymi
stringami
- przechowywanie ostatnich postów w formie podstawowej i przetworzonej do wyświetlania z użyciem aktywnego szablonu
- przechowywanie danych zalogowanych użytkowników, aktywnych sesji
- indeks tagów i słów kluczowych
- obsługa HTTP Push
Oczywiście ilość możliwych zastosowań jest znacznie większa, prawdopodobnie te kilka obiektów statycznych, które wykorzystuję, ulegnie rozbudowie i rozwinięciu. Na chwilę obecną aplikacja po starcie zużywa 17.1MB pamięci operacyjnej (nie licząc .NET Framework 4), osiągając maksimum na poziomie 51MB. Dla typowego serwera - wyjątkowo mało.
Brak komentarzy:
Prześlij komentarz