Jak poprawić ASP.NET wydajność aplikacji MVC?

Jak poprawić swoją ASP.NET wydajność aplikacji MVC?

Author: SDReyes, 2010-02-11

16 answers

Skompilowana lista możliwych źródeł poprawy znajduje się poniżej:

Ogólne

  • użyj profilera, aby wykryć wycieki pamięci i problemy z wydajnością w aplikacji. osobiście proponuję dotTrace
  • Uruchom witrynę w trybie wydania, a nie w trybie debugowania, podczas produkcji, a także podczas profilowania wydajności. Tryb zwalniania jest znacznie szybszy. Tryb debugowania może ukryć problemy z wydajnością we własnym kod.

Buforowanie

  • użyj CompiledQuery.Compile() unikanie rekurencyjnie rekompilacja twojego zapytania wyrażenia
  • pamięć podręczna nie podatna na zmiany content using OutputCacheAttribute aby zapisać niepotrzebne i działania egzekucje
  • używaj plików cookie do często dostępnych informacji niewrażliwych
  • użyj ETags i expiration-napisz własne ActionResult metody w razie potrzeby
  • rozważ użycie RouteName do organizowania tras, a następnie użyj go do Generuj nie używaj metody ActionLink opartej na drzewie wyrażeń.
  • rozważ wdrożenie strategii buforowania rozdzielczości trasy
  • umieść powtarzający się kod w swoim PartialViews, unikaj renderowania go XXXX razy: jeśli kończy się wywołaniem tej samej części 300 razy w tym samym widoku, prawdopodobnie jest coś źle z tym. Wyjaśnienie I Benchmarki

Routing

Bezpieczeństwo

  • Użyj uwierzytelniania formularzy, Zachowaj często dostępne poufne dane w bilet uwierzytelniania

DAL

Równoważenie obciążenia

  • Użyj odwrotnych serwerów proxy, aby rozłożyć obciążenie klienta na instancję aplikacji. (Stack Overflow uses HAProxy (MSDN ).

  • Użyj kontrolerów asynchronicznych do wdrażanie działań, które zależą od przetwarzania zasobów zewnętrznych.

Strona Klienta

  • zoptymalizuj swoją stronę klienta, użyj narzędzia typu YSlow dla sugestie dotyczące poprawy wydajności
  • użyj AJAX do aktualizacji komponentów interfejsu użytkownika, unikaj aktualizacji całej strony, gdy to możliwe.
  • rozważ implementację architektury pub-sub-tj. Comet - do dostarczania treści przeciwko przeładuj na podstawie timeoutów.
  • przenoszenie wykresów i generowanie wykresów logika po stronie klienta, jeśli to możliwe. Generowanie wykresów to kosztowna działalność. Odroczenie po stronie klienta serwera z niepotrzebne obciążenie i pozwala na pracę z wykresami lokalnie bez tworzenia nowych request (tj. Flex charting, jqbargraph, MoreJqueryCharts ).
  • W 2008 roku firma została założona przez firmę Microsoft, która od 2009 roku zajmuje się dystrybucją i dystrybucją oprogramowania.]}
  • Minify -Compile - Twój JavaScript w celu poprawy rozmiar skryptu
  • Zachowaj mały rozmiar plików cookie, Ponieważ pliki cookie są wysyłane na serwer na każde żądanie.
  • rozważ użycie DNS i prefetching linków, jeśli to możliwe.

Konfiguracja globalna

  • Jeśli używasz Razora, Dodaj następujący kod w swoim globalnym.asax.cs, domyślnie, Asp.Net MVC renderuje z silnikiem aspx i maszynką do golenia. Używa się tylko RazorViewEngine.

    ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new RazorViewEngine());

  • Dodaj gzip (Kompresja HTTP) i statyczna pamięć podręczna (obrazy, css,...) w sieci.config <system.webServer> <urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true"/> </system.webServer>

  • Usuń nieużywane Moduły HTTP
  • Wyczyść swój HTML, gdy tylko zostanie wygenerowany (w Twojej sieci.config) i wyłącz viewstate jeśli nie używasz <pages buffer="true" enableViewState="false">
 289
Author: SDReyes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:28

Code Climber i ten wpis na blogu zawiera szczegółowe sposoby zwiększenia wydajności aplikacji.

Skompilowane zapytanie zwiększy wydajność Twojej aplikacji, ale nie ma nic wspólnego z ASP.NET MVC. Przyspieszy to każdą aplikację db, więc tak naprawdę nie chodzi o MVC.

 10
Author: LukLed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-27 09:54:09

Podstawową sugestią jest przestrzeganie zasad odpoczynku i poniższe punkty wiążą niektóre z tych zasad z ASP.NET MVC framework:

    To raczej sugestia "Web performance / scalability " (w przeciwieństwie do wydajności na poziomie mikro/maszynowym) i ważna decyzja projektowa, która wpłynie na przyszłość aplikacji - szczególnie w przypadku, gdy stanie się popularna lub jeśli potrzebujesz tolerancji na błędy. przykład.
  • nie używaj sesji
  • nie używaj tempdata-która używa sesji
  • nie próbuj 'buforować' wszystkiego 'przedwcześnie'.
  • Use Forms Authentication
    • przechowuj często dostępne poufne dane w paragonie uwierzytelniania
  • używaj plików cookie do często dostępnych informacji niewrażliwych
  • spraw, aby twoje zasoby były dostępne w sieci
  • Skompiluj swój JavaScript. jest biblioteka kompilatora, aby to zrobić, jak również (jasne są inne, po prostu wyszukaj 'kompilator JavaScript' zbyt)
  • Użyj CDNs ( Content Delivery Network) - szczególnie dla dużych plików multimedialnych i tak dalej.
  • rozważ różne rodzaje przechowywania danych, na przykład pliki, przechowuje klucze/wartości, itd. - nie tylko SQL Server
  • Na koniec przetestuj swoją stronę pod kątem wydajności]}
     10
    Author: ziya,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2016-06-15 02:39:32

    Może to wydawać się oczywiste, ale Uruchom witrynę w trybie wydania, a nie w trybie debugowania, podczas produkcji, a także podczas profilowania wydajności. Tryb zwalniania jest dużo szybszy. Tryb debugowania może ukryć problemy z wydajnością we własnym kodzie.

     7
    Author: Craig Stuntz,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2010-08-05 12:23:27

    Podczas uzyskiwania dostępu do danych przez LINQ polegaj na IQueryable ...

    Po co używać asqueryable () zamiast List()?

    ... i leverge Dobry Wzór repozytorium:

    Ładowanie Subrecordów w repozytorium wzór

    To zoptymalizuje dostęp do danych, aby upewnić się, że tylko potrzebne dane są ładowane i tylko wtedy, gdy są potrzebne.

     6
    Author: Keith Adler,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2017-05-23 11:55:10

    Nie jest to optymalizacja wstrząsająca ziemią, ale pomyślałem, że to wyrzucę - Użyj CDN do jQuery itp..

    Cytat z samego ScottGu: Microsoft Ajax CDN pozwala znacząco poprawić wydajność ASP.NET formularze internetowe i ASP.NET aplikacje MVC, które używają ASP.NET AJAX lub jQuery. Usługa jest dostępna za darmo, nie wymaga rejestracji i może być używana zarówno do celów komercyjnych, jak i niekomercyjnych.

    Używamy nawet CDN dla naszych webpartów w Moss, które używają jQuery.

     6
    Author: kd7,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2016-06-15 02:35:29

    Również jeśli używasz NHibernate możesz włączyć i ustawić pamięć podręczną drugiego poziomu dla zapytań i dodać do zapytań zakres i timeout. I jest kick ass profiler dla EF , L2S i NHibernate- http://hibernatingrhinos.com/products/UberProf . pomoże to dostroić Twoje zapytania.

     6
    Author: Peter Mortensen,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2016-06-15 02:40:21

    Dodam jeszcze:

    1. Użyj Sprite : Sprite to świetna rzecz, aby zmniejszyć żądanie. Łączysz wszystkie obrazy w jeden i używasz CSS, aby uzyskać dobre część sprite ' a. Microsoft zapewnia dobrą bibliotekę, aby to zrobić: Sprite i Image Optimization Preview 4 .

    2. Buforuj obiekt serwera: Jeśli masz listy referencji lub dane, które rzadko się zmieniają, możesz buforować je do pamięci zamiast co jakiś czas przeszukiwać bazę danych czas.

    3. Użycie ADO.NET zamiast encji Framework: EF4 or EF5 są świetne, aby skrócić czas rozwoju, ale Optymalizacja będzie bolesna. Łatwiej jest zoptymalizować procedurę składowaną niż encję Ramy. Dlatego powinieneś używać procedur przechowywania w jak największym stopniu. Dapper zapewnia prosty sposób zapytań i map SQL z bardzo dobrym wydajność.

    4. Strona pamięci podręcznej lub strona częściowa: MVC zapewnia łatwy filtr do strony pamięci podręcznej według niektórych parametry, więc użyj go.

    5. Zmniejsz wywołania bazy danych: możesz utworzyć unikalne żądanie bazy danych, które zwraca wiele obiektów. Sprawdź na stronie Dapper.

    6. Zawsze miej czystą architekturę : miej czystą architekturę n-warstwową, nawet na małym projekcie. Pomoże Ci to zachować czysty kod, a w razie potrzeby łatwiej go zoptymalizować.

    7. Możesz spojrzeć na ten szablon " NEOS-SDI MVC Template " które będą stwórz czystą architekturę z dużą ilością poprawa wydajności domyślnie (check MvcTemplate strona internetowa).

     5
    Author: Jeff Lequeux,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2016-11-02 06:54:22

    Oprócz wszystkich wspaniałych informacji na temat optymalizacji aplikacji po stronie serwera powiedziałbym, że powinieneś rzucić okiem na YSlow. Jest to doskonały zasób do poprawy wydajności witryny po stronie klienta.

    Dotyczy to wszystkich stron, nie tylko ASP.NET MVC.

     4
    Author: Steve Haigh,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2016-06-15 02:40:56

    Jedną z bardzo łatwych rzeczy do zrobienia jest myślenie asynchronicznie podczas uzyskiwania dostępu do danych, które chcesz dla strony. Niezależnie od tego, czy czytasz z usługi internetowej, Pliku, bazy danych czy czegoś innego, używaj modelu asynchronicznego w jak największym stopniu. Chociaż niekoniecznie pomoże to jednej stronie być szybsze, pomoże to Twojemu serwerowi działać lepiej ogólnie.

     3
    Author: No Refunds No Returns,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2010-02-12 18:14:27

    1: Get Timings. Dopóki nie wiesz, gdzie jest spowolnienie, pytanie jest zbyt szerokie, aby odpowiedzieć. Projekt, nad którym pracuję, ma ten dokładny problem; nie ma logowania, aby nawet wiedzieć, jak długo pewne rzeczy trwają; możemy tylko zgadywać, co do powolnych części aplikacji, dopóki nie dodamy timingów do projektu.

    2: Jeśli masz operacje sekwencyjne, nie bój się lekko wielowątkowy. Zwłaszcza w przypadku operacji blokowania. PLINQ jest twoim przyjacielem.

    3: Pregenerate your MVC Widoki podczas publikowania... To pomoże w "pierwszej stronie hit"

    4: niektórzy argumentują za zaletami procedury składowanej/ADO szybkości. Inni argumentują za szybkością rozwoju EF i wyraźniejszym seprataionem poziomów i ich celem. Widziałem bardzo powolne projekty, gdy SQL i obejścia używać Sprocks / Views do pobierania i przechowywania danych. Ponadto, trudność do przetestowania idzie w górę. Nasz obecny kod, który konwertujemy z ADO na EF nie wypada gorzej (a w niektórych przypadki lepsze) niż stary model ręcznie zwijany.

    5: To powiedziawszy, pomyśl o rozgrzewce aplikacji. Częścią tego, co robimy, aby wyeliminować większość problemów z wydajnością EF, było dodanie specjalnej metody rozgrzewania. Nie prekompiluje żadnych zapytań ani niczego, ale pomaga w ładowaniu/generowaniu metadanych. Może to być jeszcze ważniejsze w przypadku modeli Code First.

    6: jak mówili inni, nie używaj stanu sesji lub ViewState, jeśli to możliwe. Niekoniecznie są optymalizacje wydajności, o których myślą Programiści, ale gdy zaczniesz pisać bardziej złożone aplikacje internetowe, potrzebujesz szybkości reakcji. Stan sesji wyklucza to. Wyobraź sobie długie zapytanie. Decydujesz się otworzyć nowe okno i spróbować mniej skomplikowane. Cóż, równie dobrze mogłeś poczekać z włączonym stanem sesji, ponieważ serwer będzie czekał aż pierwsze żądanie zostanie wykonane przed przejściem do następnego dla tej sesji.

    19: 00 Zapisz rzeczy, które często używaj, ale nie zmieni realistycznie pamięci podręcznej. Net. Spróbuj wsadzić swoje wstawki / aktualizacje tam, gdzie to możliwe.

    7.1: unikaj kodu dostępu do danych w swoich widokach bez cholernie dobrego powodu. Nie mówiłbym tego, gdybym tego nie widział. Mieli już dostęp do swoich danych podczas składania modelu, dlaczego do cholery nie włączyli go do modelu?

     2
    Author: to11mtm,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2015-03-18 23:26:39

    Chciałem tylko dodać moje 2 centy. Najskuteczniejszym sposobem optymalizacji generowania trasy URL w aplikacji MVC jest... nie Generuj ich wcale.

    Większość z nas mniej więcej wie, w jaki sposób adresy URL są generowane w naszych aplikacjach, więc po prostu używanie statycznych Url.Content("~/Blahblah") zamiast Url.Action() lub Url.RouteUrl(), gdzie to możliwe, bije wszystkie inne metody prawie 20 razy, a nawet więcej.

    PS. Przeprowadziłem benchmark kilku tysięcy iteracji i opublikowałem wyniki na moim blogu , jeśli jestem zainteresowany.

     2
    Author: Alex,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2017-08-22 16:15:51

    W swoim clamour optymalizacji po stronie klienta, nie zapomnij o warstwie bazy danych. Mieliśmy aplikację, która trwała od 5 sekund do załadowania do 50 sekund na noc.

    Podczas inspekcji wprowadziliśmy wiele zmian w schemacie. Po odświeżeniu statystyk nagle stała się tak samo responsywna jak wcześniej.

     1
    Author: Robbie Dee,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2015-07-20 10:36:49
    1. Zaimplementuj Gzip.
    2. Użyj asynchronicznego renderowania dla częściowych widoków.
    3. zminimalizuj trafienia do bazy danych.
    4. Użyj skompilowanego zapytania.
    5. Uruchom profiler i znajdź niepotrzebne trafienia. Zoptymalizuj wszystkie procedury przechowywane, które zwracanie odpowiedzi zajmuje więcej niż 1 sekundę.
    6. Użyj buforowania.
    7. Użyj Wiązanie minifikacja optymalizacja.
    8. Użyj narzędzi HTML 5, takich jak pamięć podręczna sesji i pamięć lokalna dla zawartości readonly.
     1
    Author: Vinayak,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2016-06-15 02:50:30

    Oto rzeczy do zrobienia

    1. Kernel mode Cache
    2. Tryb rurociągu
    3. Usuń nieużywane Moduły
    4. runAllManagedModulesForAllRequests
    5. nie pisz w wwwroot
    6. Usuń nieużywane silniki widoku i język
     0
    Author: Zahid Mustafa,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2017-04-03 09:24:00

    Wykorzystanie wiązania i minifikacji pomaga również poprawić wydajność. Zasadniczo skraca czas ładowania strony.

     0
    Author: Neelima,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2017-07-12 22:30:48