Vergleichen von Profilierungssitzungen in XHProf Admin

Der Artikel handelt von einem praktischen Tool zum Vergleichen von Sitzungen zur Erstellung von PHP-Code-Profilen, mit dem Engpässe im Projekt auf CMS Bitrix schnell festgestellt werden konnten.


Aus der Ferne


Im Juli wurde Bitrix zu diesem Zeitpunkt auf die neueste Version aktualisiert ... Und die Seitenladegeschwindigkeit sank: irgendwo um 20%, irgendwo um 300 +%. Besonders in der Phase der Kundenbestellung.


Die Zahlen sind beeindruckend und traurig. Warum aktualisiert?


N | Feststoff


Das heißt Es bestand die Gefahr, dass wir, wenn wir nicht aktualisierten, zwei Probleme auf einmal lösen müssten: das tatsächliche Aktualisieren von Bitrix und das Aktualisieren unserer Codebasis auf PHP> 7.1.


Grund für die Bremsen


Wie sich herausstellte, ist der Grund für die größten Bremsen die neue Codelogik für die Arbeit mit Lieferprofilen. Gemäß dem Code haben sie es korrekter gemacht, oder so etwas: Sendungen wurden als separate Einheiten angezeigt. Jetzt kann die Bestellung in mehreren Sendungen versendet werden (mit eigenen Merkmalen in Bezug auf Kosten, Versandart und Zusammensetzung der Ware).


Das Übermittlungsprofil ist jetzt jedoch ein separater Eintrag in der Datenbank mit den Einschränkungen des Bitrix-Kernels, der jedes Mal angezeigt wird, wenn Sie bei einer Bestellung die Möglichkeit prüfen, dieses Profil anzuzeigen.


Im Allgemeinen konzentriert sich der Artikel nicht darauf, was genau überarbeitet wurde, um mit den Bremsen fertig zu werden, sondern auf ein Tool, mit dem Engpässe im Code schnell gefunden und behoben werden können.


XHProf Admin


Zu unserer Verfügung stand ein beliebter Profiler von Facebook - XHProf. Die Nachteile, die den Betrieb des Tools behindern, beziehen sich auf die GUI:


  • Keine klare Navigation zwischen den Profilierungssitzungen
  • Es können nicht mehr als zwei Sitzungen gleichzeitig außerhalb desselben Namespaces verglichen werden.
  • Sie können sie in der Sitzungsliste nicht kommentieren. Nach der zehnten Sitzung vergessen Sie bereits, mit welchen Änderungen die vorherigen Profilerstellungsergebnisse zusammenhängen.

Infolgedessen wurde unter Berücksichtigung der SOURCES der nativen XHProf-GUI und ein wenig entsetzt eine neue GUI dafür geschrieben, die die oben genannten Nachteile abdeckt.


Installation


Link zum Projekt


Ich werde nicht beschreiben, wie man XHProf und Profile installiert, es gibt zumindest einige gute Tutorials auf dem Habré.


Um XHProf Admin zu installieren, legen Sie den Ordner xhprof_admin im Ordner xhprof_html des nativen XHProf ab. Oder klonen Sie das gesamte Projekt (es enthält bereits sowohl XHProf als auch die neue GUI).


Öffnen Sie dann die Seite <Pfad zu xhprof> / xhprof_html / xhprof_admin /
Wenn die Zuordnung aktiviert ist, wie in der Dokumentation empfohlen, müssen Sie <Pfad zu xhprof> / xhprof_admin / öffnen.


Hauptseite


N


Enthält:


  • Listet alle Profilerstellungssitzungen nach Datum sortiert auf
  • Felder für Sitzungskommentare
  • Dohlen, mit denen Sie Sitzungen zum Löschen, Vergleichen und Zusammenfassen auswählen können
  • Link zu einem neuen Bericht
  • Links zu nativem Bericht und Callgraph
  • Sitzungsgewichtungsfelder für Diff und Aggregat
  • Ein Feld, das die Reihenfolge angibt, in der Sitzungen im Vergleichsmodus und im Diff-Modus angezeigt werden
  • Schaltflächen:
    • Vergleichen - vergleicht ausgewählte Sitzungen (neuer Bericht)
    • Diff - Ein Standardbericht zum Vergleichen von Sitzungen in einem Namespace
    • Aggregat - Standardbericht mit Sitzungsaggregation in einem Namespace
    • Benutzerdefinierte Kommentare speichern - speichert den Kommentar für die Sitzung (in einer separaten Datei)
    • Ausgewählte Läufe löschen - löscht Sitzungs- und Kommentardateien
    • Link zur nativen Sitzungsliste

Originalbericht anzeigen, Diff-Läufe, Aggregierte Läufe, Callgraph-native Funktionen der XHProf-Benutzeroberfläche anzeigen - ich werde sie nicht beschreiben. Ich kann nur sagen, dass Sie mit XHProf Admin bequem zu ihnen navigieren können, anstatt Links manuell zu kompilieren.


Läufe vergleichen


N | Feststoff


Ein neuer Bericht, mit dem Sie das Wachstum oder den Rückgang der Produktivität schnell bewerten können.
Um es zu benutzen, auf der Hauptseite:


  • Wählen Sie die Sitzungen aus, die wir vergleichen möchten.
  • Wir legen das Sortierfeld "Sortieren" fest, um die Reihenfolge zu bestimmen, in der Sitzungen angezeigt werden: Je kleiner der Wert des Feldes, desto früher wird die Sitzung angezeigt. Die allererste Sitzung wird als Basissitzung genommen - alle nachfolgenden Sitzungen werden damit verglichen.
  • Wenn wir die Durchschnittswerte von Metriken anzeigen möchten, markieren Sie "show average".
  • Klicken Sie auf "Vergleichen".
    N | Feststoff

Der Bericht zeigt nicht die% an, die die Funktion für jede Metrik belegt, um die Seite nicht zu überladen, sondern um absolute Werte anzuzeigen. Wenn in der Metrik für die Funktion, die zwischen der Basissitzung und der folgenden profiliert wird, ein Unterschied von mehr als 1% besteht, wird dies deutlich angezeigt: Grün bedeutet eine Verbesserung, Rot bedeutet eine Regression.


Default:


  • Der Bericht zeigt die ersten 100 Funktionen an. Wenn Sie mehr benötigen, klicken Sie auf "Alle anzeigen".
  • Die Daten sind sortiert nach der Angabe „Inkl. Wall Time (microsec) ”, aber Sie können auf eine Metrik klicken und danach sortieren.

Um eine Sitzung aus dem Bericht auszuschließen, klicken Sie auf "Ausschließen".


Es ist eine Sortierung nach jeder Metrik möglich - klicken Sie einfach auf die Spaltenüberschrift.


Um die Durchschnittswerte für alle ausgewählten Sitzungen anzuzeigen, klicken Sie auf „Durchschnittswerte anzeigen“.


Für einen Drilldown zu einer Funktion können Sie auf eine Zelle am Schnittpunkt von Funktion und Metrik mit der angezeigten Sitzung klicken.


N | Feststoff


Anwendungsbeispiel


  1. Wir haben den Profiler im Quellcode gestartet. Wir haben die Sitzungsliste geöffnet und einen Kommentar hinzugefügt.
  2. Wir haben den Profiler für den verbesserten Code gestartet. Fügte auch einen Kommentar hinzu.
  3. Habe Punkt 2 mehrmals gemacht.
  4. Dann öffneten wir die Liste der Profilerstellungssitzungen, wählten nacheinander alle Sitzungen aus und klickten auf Vergleichen.
  5. Wir haben uns die Änderungen angesehen.
  6. Sie entschieden, was sie sonst noch beschleunigen sollten.

Mit XHProf Admin können häufig verwendete Funktionen, die von einem einzelnen Benutzer ausgeführt werden, bequem identifiziert werden. Beispielsweise werden in Bitrix beim Aufgeben einer Bestellung beim Wechsel von einer Phase zur anderen (Lieferung, Zahlung, Kontakte usw.) jedes Mal mehrere Funktionen aufgerufen, um die Integrität des Warenkorbs usw. zu überprüfen. Diese Phasen werden separat profiliert und dann im Bericht zusammen angezeigt Vergleichen Sie. Die Ergebnisse dieser Funktionen können zwischengespeichert werden, was die Übergangszeit von Stufe zu Stufe erheblich beschleunigt.


Zusammenfassung


Infolgedessen haben wir den Geschwindigkeitsverlust in den Phasen der Auftragserteilung bei der Aktualisierung von Bitrix ausgeglichen und gleichzeitig andere Bereiche der Website analysiert und beschleunigt.
Von Zeit zu Zeit verwenden wir XHProf Admin für Projekte als intuitivere Benutzeroberfläche.
Dokumentationslink zu XHProf Admin: go


Wer sich für das Thema Codeoptimierung und Tools dafür interessiert, schreibt in die Kommentare.

Source: https://habr.com/ru/post/de478858/


All Articles