Udostępnij za pośrednictwem


Profilowanie i debugowanie aplikacji ASP.NET MVC za pomocą pakietów Glimpse

Autor: Rick Anderson

Spojrzenie jest kwitnącą i rozwijającą się rodziną pakietów NuGet open source, które zapewniają szczegółową wydajność, debugowanie i informacje diagnostyczne dla aplikacji ASP.NET. Jest to proste instalowanie, lekkie, ultra szybkie i wyświetlanie kluczowych metryk wydajności w dolnej części każdej strony. Umożliwia przechodzenie do szczegółów aplikacji, gdy musisz dowiedzieć się, co się dzieje na serwerze. Spojrzenie zapewnia tak wiele cennych informacji, które zalecamy, aby używać ich w całym cyklu programowania, w tym w środowisku testowym platformy Azure. Podczas gdy narzędzia programistyczne Fiddler i F-12 zapewniają widok po stronie klienta, funkcja Glimpse zapewnia szczegółowy widok z serwera. Ten samouczek koncentruje się na korzystaniu z pakietów Glimpse ASP.NET MVC i EF, ale dostępnych jest wiele innych pakietów. Jeśli to możliwe, połączę się z odpowiednimi dokumentami Glimpse , które pomagam utrzymać. Spojrzenie jest projektem open source, możesz też współtworzyć kod źródłowy i dokumenty.

Instalowanie funkcji Glimpse

Możesz zainstalować narzędzie Glimpse z konsoli menedżera pakietów NuGet lub z poziomu konsoli Zarządzanie pakietami NuGet . Na potrzeby tego pokazu zainstaluję pakiety Mvc5 i EF6:

install Glimpse from NuGet Dlg (Instalowanie funkcji Glimpse z biblioteki NuGet Dlg)

Wyszukaj pozycję Glimpse.EF

Glimpse.EF from NuGet install dlg (Glimpse.EF from NuGet install dlg)

Po wybraniu pozycji Zainstalowane pakiety można wyświetlić zainstalowane moduły zależne Glimpse:

Zainstalowane pakiety Glimpse z biblioteki DLg

Następujące polecenia instalują moduły Glimpse MVC5 i EF6 z konsoli menedżera pakietów:

PM> Install-Package Glimpse.MVC5
PM> Install-Package Glimpse.EF6

Włączanie funkcji Glimpse dla hosta lokalnego

Przejdź do http://localhost:<portu #>/glimpse.axd i kliknij przycisk Włącz wgląd .

Strona przebłysków osiowych

Jeśli masz wyświetlany pasek ulubionych, możesz przeciągać i upuszczać przyciski Glimpse i dodawać je jako zakładki:

IE z funkcją Glimpse bookmarklets

Teraz możesz poruszać się po aplikacji, a ekran Head Up ( HUD) jest wyświetlany w dolnej części strony.

Strona Menedżera kontaktów z huD

Strona Glimpse HUD zawiera szczegółowe informacje o chronometrażu pokazane powyżej. Nietrudne dane wydajności wyświetlane przez huD mogą natychmiast powiadomić o problemie — przed przejściem do cyklu testowego. Kliknięcie przycisku "g" w prawym dolnym rogu powoduje wyświetlenie panelu Glimpse:

Panel wglądu

Na powyższej ilustracji wybrano kartę Wykonywanie, która pokazuje szczegóły chronometrażu akcji i filtrów w potoku. Mój czasomierz filtru Stop Watch można zobaczyć na etapie 6 potoku. Chociaż mój czasomierz o lekkiej wadze może zapewnić przydatne dane profilu/chronometrażu, pomija cały czas spędzony w autoryzacji i renderowaniu widoku. Aby dowiedzieć się więcej o moim czasomierzu, zobacz Profile and Time your ASP.NET MVC app (Czas i czas aplikacji MVC) na platformie Azure.

Karta Oś czasu

Zmodyfikowano wybitny samouczek platformy EF 6/MVC 5 tom Dykstra z następującą zmianą kodu na kontroler instruktorów:

public ActionResult Index(int? id, int? courseID, int ? eager)
{
    var viewModel = new InstructorIndexData();

    viewModel.Instructors = db.Instructors
        .Include(i => i.OfficeAssignment)
        .Include(i => i.Courses.Select(c => c.Department))
        .OrderBy(i => i.LastName);

    if (id != null)
    {
        ViewBag.InstructorID = id.Value;
        viewModel.Courses = viewModel.Instructors.Where(
            i => i.ID == id.Value).Single().Courses;
    }

    if (courseID != null)
    {
       ViewBag.CourseID = courseID.Value;
       // Eager loading
       if (eager != null && eager > 0)
       {
          ViewBag.eagerMsg = "Eager Loading";

          viewModel.Enrollments = viewModel.Courses.Where(
              x => x.CourseID == courseID).Single().Enrollments;

       }
       else { 
        // Explicit loading
          ViewBag.eagerMsg = "Explicit Loading";

        var selectedCourse = viewModel.Courses.Where(x => x.CourseID == courseID).Single();
        db.Entry(selectedCourse).Collection(x => x.Enrollments).Load();
        foreach (Enrollment enrollment in selectedCourse.Enrollments)
        {
            db.Entry(enrollment).Reference(x => x.Student).Load();
        }

        viewModel.Enrollments = selectedCourse.Enrollments;
       }
    }

    return View(viewModel);
}

Powyższy kod pozwala mi przekazać ciąg zapytania (eager) do kontrolowania chętnego lub jawnego ładowania danych. Na poniższej ilustracji jest używane jawne ładowanie, a strona chronometrażu pokazuje każdą rejestrację załadowaną w metodzie Index akcji:

jawne ładowanie

W poniższym kodzie jest określony element chętny, a każda rejestracja jest pobierana po wywołaniu Index widoku:

jest określona wartość chętna

Możesz umieścić wskaźnik myszy na segmencie czasu, aby uzyskać szczegółowe informacje o chronometrażu:

zatrzymaj wskaźnik myszy, aby wyświetlić szczegółowy czas

Powiązanie modelu

Karta powiązania modelu zawiera wiele informacji, które ułatwiają zrozumienie, w jaki sposób są powiązane zmienne formularza i dlaczego niektóre z nich nie są powiązane zgodnie z oczekiwaniami. Na poniższej ilustracji przedstawiono ikonę ? , którą można kliknąć, aby wyświetlić stronę pomocy dotyczącej tej funkcji.

wyświetlanie widoku powiązania modelu

Trasy

Karta Glimpse Routes (Trasy wglądu) może pomóc w debugowaniu i zrozumieniu routingu. Na poniższej ilustracji wybrano trasę produktu (i jest wyświetlana w kolorze zielonym, konwencji Glimpse). wybrana nazwa produktu Wyświetlane są również ograniczenia tras, obszary i tokeny danych. Aby uzyskać więcej informacji, zobacz Wyświetlanie tras i routingu atrybutów w usłudze ASP.NET MVC 5 .

Korzystanie z funkcji Glimpse na platformie Azure

Domyślne zasady zabezpieczeń funkcji Glimpse umożliwiają wyświetlanie danych tylko z hosta lokalnego. Te zasady zabezpieczeń można zmienić, aby można było wyświetlać te dane na serwerze zdalnym (takim jak aplikacja internetowa na platformie Azure). W przypadku środowisk testowych na platformie Azure dodaj wyróżniony znacznik do dołu pliku web.config , aby włączyć funkcję Glimpse:

<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
    <runtimePolicies>
      <ignoredTypes>
        <add type="Glimpse.AspNet.Policy.LocalPolicy, Glimpse.AspNet"/>
      </ignoredTypes>
    </runtimePolicies>
  </glimpse>
</configuration>

Dzięki tej zmianie każdy użytkownik może zobaczyć dane śledzenia w lokacji zdalnej. Rozważ dodanie powyższych znaczników do profilu publikowania, aby było wdrażane tylko wtedy, gdy używasz tego profilu publikowania (na przykład profilu testowego platformy Azure). Aby ograniczyć dane funkcji Glimpse, dodamy canViewGlimpseData rolę i zezwolimy tylko użytkownikom w tej roli na wyświetlanie danych funkcji Glimpse.

Usuń komentarze z pliku GlimpseSecurityPolicy.cs i zmień wywołanie IsInRole z Administrator na canViewGlimpseData rolę:

public class GlimpseSecurityPolicy : IRuntimePolicy
{
    public RuntimePolicy Execute(IRuntimePolicyContext policyContext)
    {
        var httpContext = policyContext.GetHttpContext();
        if (!httpContext.User.IsInRole("canViewGlimpseData"))
        {
            return RuntimePolicy.Off;
        }

        return RuntimePolicy.On;
    }

    public RuntimeEvent ExecuteOn
    {
        get { return RuntimeEvent.EndRequest | RuntimeEvent.ExecuteResource; }
    }
}

Ostrzeżenie

Zabezpieczenia — rozbudowane dane udostępniane przez aplikację Glimpse mogą uwidocznić bezpieczeństwo aplikacji. Firma Microsoft nie przeprowadziła inspekcji zabezpieczeń funkcji Glimpse do użycia w aplikacjach produkcyjnych.

Aby uzyskać informacje na temat dodawania ról, zobacz samouczek Deploy a Secure ASP.NET MVC 5 web app with Membership, OAuth i SQL Database to Azure tutorial (Wdrażanie bezpiecznej aplikacji internetowej MVC 5 z członkostwem, uwierzytelnianiem OAuth i SQL Database na platformie Azure).

Dodatkowe zasoby