Anegdotycznie odwiedziłem wiele stron .aspx, które wymagają znacznego czasu ładowania każdej strony.
Czy moje doświadczenie jest wyjątkowe?
Jeśli nie, dlaczego strona ASP.Net może ładować się powoli?
Edycja: teraz około 7 lat później (29.12.2017). Dobra wiadomość jest taka, że nie widzę już tego problemu zbyt często, być może dlatego, że Google zaczął karać strony, które ładują się zbyt wolno. Teraz korzystam z ASP.NET MVC z dobrymi wynikami, obecnie działającymi na prywatnych wirtualnych serwerach Vultr (platforma Azure była o wiele za wolna, kiedy próbowaliśmy). Jednymi z najgorszych przestępców, jakie teraz widzę, są systemy CMS, takie jak Wordpress i Drupal, prawdopodobnie działające na sprzęt, który jest zbyt wolny lub nieosiągalny w stosunku do wielkości ruchu w witrynie. -HK1
Odpowiedzi:
Pięć możliwości, o których mogę pomyśleć (oprócz niektórych zaawansowanych technik buforowania itp.):
Niewłaściwy rozmiar serwera WWW dla ASP.NET (tj. Pomyślałem, że serwer wielkości klasycznej ASP byłby w porządku)
Zapomniałem usunąć
<compilation debug="true"/>
z pliku web.config i otrzymałem mniej niż optymalny kod .JIT na pierwszą wizytę
Kod osadzony na stronie (w przeciwieństwie do skompilowanego kodu z tyłu), który wymaga kompilacji przed JIT i oprócz niego.
ViewState (dla WebForms ASP.NET) staje się zbyt duży .
źródło
Jak się wydaje, może to być godna odpowiedź.
Może to mieć wpływ na wiele czynników. Witryna, z której korzystasz w tej chwili, jest zbudowana na platformie .NET i zazwyczaj jest bardzo szybka (bez przestojów / okresów konserwacji).
Twórcy tych witryn, do których odwiedzasz, mogą przesyłać ci mnóstwo danych, powolne połączenia, przeciążone serwery itp. Itp. Może to być także percepcja podczas gry. Ponadto, może szalony javascript w grze i korzystasz z IE? Czy flash?
źródło
Jeśli tak naprawdę nie wiesz, co robisz, ASP.NET WebForms umożliwia tworzenie aplikacji internetowych przez upuszczenie formantów do formularza, a nawet ukrywanie bezpaństwowości HTTP. Działa, ale ten rodzaj rozwoju nigdy nie będzie produkować wydajnego kodu, szczególnie jeśli twoja warstwa dostępu do danych obejmuje wygenerowane zapytania wybierające wszystko z ekspresowej bazy danych SQL bez indeksów.
Istnieje wiele szybkich stron asp.net, opracowanych przez ludzi, którzy rozumieją, jak naprawdę działają aplikacje internetowe. Obejmuje to tę witrynę - wykorzystuje ASP.NET MVC, który zapewnia znacznie większą kontrolę nad obsługą pojedynczych żądań i nie wyświetla rozszerzenia .aspx.
źródło
Po prostu spekulacje tutaj, jak zauważyłem to samo. Podejrzewam, że strony .asp tendencję (zauważ słowo tendencję ), aby mieć własny na serwerach spółki, w przeciwieństwie do hostowane na lub w centrach danych. Dlatego często są uruchamiane na sprzęcie i połączeniach, które nie są zaprojektowane do szybkiego ruchu w sieci. Podejrzewam, że cierpią na to również strony napędzane zimną syntezą jądrową.
źródło
Gdy strona się ładuje (zdarzenie application.start), ładowanie wszystkiego do pamięci zajmuje dużo czasu. W zależności od ustawień IIS, po około 20-30 minutach bezczynności nastąpi rozładowanie. Nie natknąłem się na przyzwoity sposób, aby utrzymać działanie aplikacji bez ciągłej pracy
GET
co 10+ minut.Źle zaprojektowany backend / warstwa danych może powodować, że wszystko działa wolno (bez względu na to, jak szybko komputer go uruchamia). Profilowanie pomoże ci określić, gdzie są problemy.
źródło
Z pewnością to sobie wyobrażasz. :)
Z każdym oprogramowaniem wchodzi wiele czynników. Architektura, redundancja przepływu kodu, jakość kodu itp. Zbyt wielu, aby nawet zacząć listowanie.
Czy chcesz udowodnić, że ASP nadaje się do użycia na poziomie przedsiębiorstwa? Ta strona (i wszystkie SE) są tworzone przy użyciu ASP.Net - w szczególności MVC.
Kiedy ostatni raz ta strona była powolna? Jestem tu od ponad roku i nigdy nie zauważyłem, że coś się z tobą kręci pomimo ogromnej bazy użytkowników.
źródło
Stan wyświetlania może naprawdę spowolnić publikację zwrotną. Jeśli masz kilka dużych rozwijanych list na stronie, nie powinieneś używać na nich stanu widoku.
Stan wyświetlania pozwala udawać, że pracujesz nad stanową aplikacją WinForm. To może czasami wpędzić cię w kłopoty.
źródło
Wszystkie powyższe są prawdopodobnie prawdą. Jednak największym czynnikiem wpływającym na wydajność w witrynie ASP.NET, nad którą pracowałem, było to, że wszystko, co było z nią związane, było stare. Wersja .NET Framework, serwery, infrastruktura bazy danych i sam kod źle się zestarzały.
Podejrzewam, że wiele stron ASP.NET to strony korporacyjne. Nie mają dużo miłości, ponieważ mają tendencję do po prostu pracy . Ludzie nie przepisują ich, dopóki nie będą musieli, co często trwa bardzo długo.
Wiem, że strona, z którą pracowałem, która używała ASP.NET, zyskała ogromne przyspieszenie właśnie dzięki przejściu na najnowszą wersję frameworka, która miała znacznie bardziej wydajne ustawienia JITing i rozsądne buforowanie.
Z drugiej strony widziałem, że wiele stron ASP.NET nie wie, jak prawidłowo skalować. Nie mają odpowiedniego ustawienia równoważenia obciążenia, ponieważ projektowanie witryny tak, aby działały poprawnie w ogrodach internetowych, nie jest powszechne ani dobrze udokumentowane w społeczności. Jeśli od samego początku nie projektujesz witryny pod ogrody internetowe, nie możesz użyć wbudowanego mechanizmu skalowania, który ma IIS. Równoważenie obciążenia oprogramowania za pomocą Windows NLB nie jest bardzo powszechne i jest skomplikowane w zarządzaniu. (To przypomina, że ASP.NET jest zwykle oprogramowaniem korporacyjnym i jest zarządzany przez firmę prowadzącą witrynę, a nie przez specjalistów IT, którzy wiedzą, jak poprawnie skonfigurować te rzeczy.)
Równoważenie obciążenia sprzętowego za pomocą F5s jest bardzo kosztowne, ale wydaje się być najczęstszym i najprostszym mechanizmem skalowania stron ASP.NET w sieciach korporacyjnych. Myślę, że wśród tłumu oprogramowania open source oczekuje się, że od samego początku będziesz budować system równoważenia obciążenia za pomocą darmowych narzędzi open source, które automatycznie skalują się w zależności od użycia. Z tego, co widziałem, nie jest to powszechne w świecie ASP.NET.
źródło