Passen Sie Ihre Leistungsdaten mit der Extensible API an.

Andrés Olivares
Andrés Olivares
Sofia Emelianova
Sofia Emelianova

Übersicht

Der Bereich Leistung unterstützt die API zur Leistungserweiterung. So können Sie der Leistungszeitachse benutzerdefinierte Daten hinzufügen. So können Sie Ihre Messwerte und Ereignisse direkt als benutzerdefinierten Track oder im Track Timings in die Leistungszeitachse einfügen. Dies kann für Entwickler von Frameworks, Bibliotheken und komplexen Anwendungen mit benutzerdefinierter Instrumentierung nützlich sein, um ein umfassenderes Verständnis der Leistung zu erhalten.

Diese API bietet zwei unterschiedliche Mechanismen:

1. User Timings API (mit performance.mark und performance.measure)

Diese API nutzt die vorhandene User Timings API. Außerdem werden Einträge in die interne Leistungszeitachse des Browsers aufgenommen, was eine weitere Analyse und Einbindung in andere Leistungstools ermöglicht.

2. Die console.timeStamp API (erweitert für DevTools)

Diese API bietet eine leistungsstarke Methode zum Instrumentieren von Anwendungen und zum Anzeigen von Zeitdaten ausschließlich im Bereich Leistung in DevTools. Es ist für einen minimalen Laufzeitaufwand ausgelegt und eignet sich daher für die Instrumentierung von Hot Paths und Produktionsbuilds. Es werden keine Einträge in die interne Leistungszeitachse des Browsers hinzugefügt.

Wichtige Features

Beide APIs bieten:

  • Benutzerdefinierte Tracks:Fügen Sie benutzerdefinierten Tracks und Trackgruppen Einträge hinzu.
  • Einträge: Tracks können mit Einträgen für Ereignisse oder Messungen gefüllt werden.
  • Farbpersonalisierung:Farbcodeeinträge zur visuellen Unterscheidung.

Wichtige Unterschiede und Verwendung der einzelnen APIs:

  • User Timings API (performance.mark, performance.measure):
    • Fügen Sie sowohl dem Bereich Leistung als auch der internen Leistungszeitachse des Browsers Einträge hinzu.
    • Ermöglicht umfangreiche Daten, einschließlich Kurzinfos und detaillierter Properties.
    • Sie können Markierungen hinzufügen, um bestimmte Momente in der Zeitachse hervorzuheben.
    • Geeignet für detaillierte Leistungsanalysen und wenn die Integration in andere Leistungstools erforderlich ist.
    • Verwenden Sie diese Option, wenn Sie zusätzliche Daten mit jedem Eintrag speichern müssen und bereits die User Timings API verwenden.
  • console.timeStamp API:
    • Fügen Sie nur Einträge zum Bereich Leistung hinzu.
    • Bietet eine deutlich höhere Leistung, insbesondere in Produktionsumgebungen.
    • Ideal für die Instrumentierung von Hot Paths und leistungskritischem Code.
    • Es können keine zusätzlichen Daten wie Kurzinfos oder Eigenschaften hinzugefügt werden.
    • Verwenden Sie diese Methode, wenn der Leistungsaufwand im Vordergrund steht und Sie Code schnell instrumentieren müssen.

Daten mit der User Timings API einfügen

Wenn Sie benutzerdefinierte Daten einfügen möchten, fügen Sie ein devtools-Objekt in das detail-Attribut der Methoden performance.mark und performance.measure ein. Die Struktur dieses devtools-Objekts bestimmt, wie Ihre Daten im Bereich Leistung dargestellt werden.

  • Verwenden Sie performance.mark, um ein sofortiges Ereignis oder einen Zeitstempel in der Zeitachse aufzuzeichnen. Sie können den Beginn oder das Ende eines bestimmten Vorgangs oder eines beliebigen Punkts von Interesse markieren, der keine Dauer hat. Wenn du ein devtools-Objekt in der detail-Property einfügst, wird im Bereich Leistung im Track Timings eine benutzerdefinierte Markierung angezeigt.

  • Verwenden Sie performance.measure, um die Dauer einer Aufgabe oder eines Prozesses zu messen. Wenn Sie ein devtools-Objekt in der detail-Property einfügen, werden im Bereich Leistung benutzerdefinierte Messwerteinträge in der Zeitachse in einem benutzerdefinierten Track angezeigt. Wenn Sie performance.mark als Referenzpunkt verwenden, um ein performance.measure zu erstellen, müssen Sie das devtools-Objekt nicht in performance.mark-Aufrufe aufnehmen.

devtools Objekt

Diese Typen definieren die Struktur des devtools-Objekts für verschiedene Erweiterungsfunktionen:

type DevToolsColor =
  "primary" | "primary-light" | "primary-dark" |
  "secondary" | "secondary-light" | "secondary-dark" |
  "tertiary" | "tertiary-light" | "tertiary-dark" |
  "error";

interface ExtensionTrackEntryPayload {
  dataType?: "track-entry"; // Defaults to "track-entry"
  color?: DevToolsColor;    // Defaults to "primary"
  track: string;            // Required: Name of the custom track
  trackGroup?: string;      // Optional: Group for organizing tracks
  properties?: [string, string][]; // Key-value pairs for detailed view
  tooltipText?: string;     // Short description for tooltip
}

interface ExtensionMarkerPayload {
  dataType: "marker";       // Required: Identifies as a marker
  color?: DevToolsColor;    // Defaults to "primary"
  properties?: [string, string][]; // Key-value pairs for detailed view
  tooltipText?: string;     // Short description for tooltip
}

Daten mit console.timeStamp einfügen

Die console.timeStamp API wurde erweitert, um das Erstellen benutzerdefinierter Zeitangaben im Bereich Leistung mit minimalem Overhead zu ermöglichen.

console.timeStamp(label: string, start?: string, end?: string, trackName?: string, trackGroup?: string, color?: DevToolsColor);
  • label: Das Label für den Zeiteintrag.
  • start: Der Name eines zuvor aufgezeichneten Zeitstempels (console.timeStamp(timeStampName)). Wenn nicht definiert, wird die aktuelle Uhrzeit verwendet.
  • end: Der Name eines zuvor aufgezeichneten Zeitstempels. Wenn nicht definiert, wird die aktuelle Uhrzeit verwendet.
  • trackName: Der Name des benutzerdefinierten Titels.
  • trackGroup: Der Name der Titelgruppe.
  • color: Die Farbe des Eintrags.

Daten in der Zeitachse ansehen

Wenn Sie Ihre benutzerdefinierten Daten in der Zeitachse sehen möchten, aktivieren Sie im Bereich Leistung die Aufnahmeeinstellungen > Erweiterungsdaten.

Das Kästchen „Erweiterungsdaten“ in den „Aufnahmeeinstellungen“ im Bereich „Leistung“.

Probieren Sie es auf dieser Demoseite aus. Aktivieren Sie Erweiterungsdaten, starten Sie eine Leistungsaufzeichnung, klicken Sie auf der Demoseite auf Neuen Corgi hinzufügen und beenden Sie die Aufzeichnung. Im Trace wird ein benutzerdefinierter Track mit Ereignissen mit benutzerdefinierten Kurzinfos und Details auf dem Tab Zusammenfassung angezeigt.

Codebeispiele

Im Folgenden finden Sie einige Beispiele dafür, wie Sie mithilfe der API eigene Daten über die verschiedenen verfügbaren Mechanismen in den Bereich Leistung einfügen.

Beispiele für die User Timings API:

In den nächsten Abschnitten finden Sie Codebeispiele, die zeigen, wie Sie der Leistungszeitachse Folgendes hinzufügen:

Benutzerdefinierte Tracks und Einträge

Sie können benutzerdefinierte Tracks erstellen und mit Einträgen füllen, um Ihre Leistungsdaten in einem benutzerdefinierten Track zu visualisieren. Beispiel:

// Mark used to represent the start of the image processing task
// The start time is defaulted to now
performance.mark("Image Processing Start");

// ... later in your code

// Track entry representing the completion of image processing
// with additional details and a tooltip
// The start time is a marker from earlier
// The end time is defaulted to now
performance.measure("Image Processing Complete", {
  start: "Image Processing Start",
  detail: {
    devtools: {
      dataType: "track-entry",
      track: "Image Processing Tasks",
      trackGroup: "My Tracks", // Group related tracks together
      color: "tertiary-dark",
      properties: [
        ["Filter Type", "Gaussian Blur"],
        ["Resize Dimensions", "500x300"]
      ],
      tooltipText: "Image processed successfully"
    }
  }
});

Dies führt in der Leistungszeitachse zum folgenden benutzerdefinierten Trackeintrag mit dem zugehörigen Kurzinfotext und den Eigenschaften:

Ein benutzerdefinierter Track in der Leistungszeitachse.

Markierungen

Sie können bestimmte Punkte in der Zeitachse mit benutzerdefinierten Markierungen hervorheben, die sich über alle Tracks erstrecken. Beispiel:

// Marker indicating when the processed image was uploaded
performance.mark("Image Upload", {
  detail: {
    devtools: {
      dataType: "marker",
      color: "secondary",
      properties: [
        ["Image Size", "2.5MB"],
        ["Upload Destination", "Cloud Storage"]
      ],
      tooltipText: "Processed image uploaded"
    }
  }
});

Das führt im Track Timings zur folgenden Markierung mit dem zugehörigen Kurzinfotext und den Eigenschaften:

Eine benutzerdefinierte Markierung im Zeitplan-Track.

console.timeStamp API-Beispiele:

// Record a start timestamp
console.timeStamp("start");

// Measure duration from start to now
console.timeStamp("measure 1", "start", undefined, "My Track", "My Group", "primary-light");

// Record an end timestamp
console.timeStamp("end");

// Measure duration from start to end
console.timeStamp("measure 2", "start", "end", "My Track", "My Group", "secondary-dark");

Dies führt in der Leistungszeitachse zum folgenden benutzerdefinierten Track-Eintrag:

Ein benutzerdefinierter Track mit benutzerdefinierten Einträgen, die mit der console.timeStamp API hinzugefügt wurden.