Omówienie
Chcesz uzyskać bardziej szczegółowe informacje o wydajności aplikacji niż te dostępne w budowanych w przeglądarce danych? W panelu Wydajność możesz teraz wyświetlać własne dane o skuteczności bezpośrednio na osi czasu. Niezależnie od tego, czy jesteś twórcą frameworka, który musi wizualizować procesy wewnętrzne, czy deweloperem biblioteki, który śledzi wpływ kodu, czy też tworzysz złożoną aplikację z niestandardowym instrumentowaniem, interfejs Performance extensibility API zapewnia narzędzia, które pomogą Ci w dogłębnym zrozumieniu tego, co dzieje się pod maską.
Dzięki wczytywaniu niestandardowych pomiarów i zdarzeń możesz tworzyć dostosowane wizualizacje w znanym panelu Skuteczność. Wyobraź sobie, że widzisz zdarzenia cyklu życia komponentu frameworku wraz ze standardowymi danymi o wydajności przeglądarki lub śledzisz przepływ wykonania niestandardowego silnika renderowania w doskonałej synchronizacji z przetwarzaniem w przeglądarce.
Ten interfejs API oferuje 2 metody osiągnięcia tego celu:
1. console.timeStamp
API (rozszerzone o DevTools)
Ten interfejs API zapewnia wydajną metodę instrumentowania aplikacji i wyświetlania danych o czasie wyłącznie w panelu Skuteczność w DevTools. Jest on zaprojektowany tak, aby generował minimalne obciążenie podczas działania, dzięki czemu nadaje się do instrumentowania często używanych ścieżek i kompilacji produkcyjnych. Nie dodaje wpisów do wewnętrznego harmonogramu wydajności przeglądarki.
2. Interfejs User Timings API (z użyciem interfejsów performance.mark
i performance.measure
)
Ten interfejs API korzysta z dotychczasowego interfejsu User Timings API. Dodaje też wpisy do wewnętrznej osi czasu wydajności przeglądarki, co umożliwia dalszą analizę i integrację z innymi narzędziami do pomiaru wydajności.
Główne zalety
Oba interfejsy API oferują:
- Ścieżki niestandardowe: dodaj ścieżki i grupy ścieżek, aby reprezentowały unikalne aspekty wydajności Twojego kodu.
- Wpisy: wypełniaj te ścieżki wpisami, które wyraźnie zaznaczają ważne zdarzenia lub czas trwania określonej operacji.
- Dostosowywanie kolorów: dzięki kolorom możesz wizualnie odróżniać różne typy zdarzeń lub pomiarów.
Wybieranie odpowiedniego interfejsu API do swoich potrzeb:
console.timeStamp
Interfejs API:- Wpływ instrumentacji na wydajność jest głównym problemem, zwłaszcza w przypadku wersji produkcyjnych.
- potrzebujesz szybkiego i efektywnego sposobu oznaczania czasów trwania lub zdarzeń bez konieczności korzystania z dodatkowych metadanych;
- Wystarczy, że dane będą wizualizowane w panelu Skuteczność.
User Timings API (
performance.mark
,performance.measure
):- Używaj, gdy chcesz przechowywać dodatkowe dane z każdą pozycją i gdy używasz już interfejsu User Timings API.
- Musisz powiązać dane rozszerzone (informacje w skrótach, szczegółowe właściwości) z wpisami dotyczącymi skuteczności.
- Chcesz dodać wizualne znaczniki, aby wyróżnić konkretne momenty.
- Dane muszą być dostępne nie tylko w DevTools, ale też na wewnętrznej osi czasu przeglądarki, aby można było je wykorzystać do szerszej analizy lub w innych narzędziach.
- znasz już interfejs User Timings API lub go używasz;
Wstrzyknij dane za pomocą console.timeStamp
Interfejs API console.timeStamp został rozszerzony, aby umożliwić tworzenie niestandardowych wpisów czasu w panelu Wydajność z minimalnym obciążeniem, zwłaszcza gdy DevTools nie rejestruje ścieżki.
console.timeStamp(label: string, start?: string|number, end?: string|number, trackName?: string, trackGroup?: string, color?: DevToolsColor);
label
:Etykieta pozycji czasowej.
start
(opcjonalnie):Jeśli zdefiniowano jako ciąg znaków: nazwa wcześniej zarejestrowanej sygnatury czasowej (za pomocą
console.timeStamp(timeStampName)
).Jeśli zdefiniowany jako liczba: sygnatura czasu w milisekundach względem Performance.timeOrigin (na przykład pobrana za pomocą
performance.now()
), która reprezentuje czas rozpoczęcia wpisu dotyczącego pomiaru czasu.Jeśli nie jest zdefiniowany, jako czas rozpoczęcia jest używany bieżący czas.
end
:Jeśli zdefiniowano jako ciąg tekstowy: nazwa wcześniej zarejestrowanej sygnatury czasowej.
Jeśli zdefiniowana jako liczba: sygnatura czasowa w milisekundach względem Performance.timeOrigin (np. pobrana za pomocą
performance.now()
), która reprezentuje czas zakończenia wpisu dotyczącego pomiaru czasu.Jeśli nie jest zdefiniowany, jako czas zakończenia jest używany bieżący czas.
trackName
:Nazwa ścieżki niestandardowej.
trackGroup
:Nazwa grupy ścieżek.
color
:Kolor wpisu.
Wstrzykiwanie danych za pomocą interfejsu API Czasy użytkownika
Aby wstrzyknąć dane niestandardowe, dodaj obiekt devtools
do właściwości detail
metod performance.mark
i performance.measure
. Struktura obiektu devtools
określa sposób wyświetlania danych w panelu Skuteczność.
Aby zarejestrować natychmiastowe zdarzenie lub sygnaturę czasową na osi czasu, użyj
performance.mark
. Możesz oznaczyć początek lub koniec konkretnej operacji lub dowolny punkt zainteresowania, który nie ma czasu trwania. Gdy w ramach właściwościdetail
uwzględnisz obiektdevtools
, w panelu Wydajność pojawi się znacznik niestandardowy na ścieżce Czasy.Użyj funkcji
performance.measure
, aby zmierzyć czas trwania zadania lub procesu. Gdy w ramach właściwościdetail
uwzględnisz obiektdevtools
, panel Skuteczność wyświetli na osi czasu w ścieżce niestandardowej wpisy niestandardowych pomiarów. Jeśli do utworzenia elementuperformance.measure
używasz elementuperformance.mark
jako punktu odniesienia, nie musisz uwzględniać obiektudevtools
w wywołaniachperformance.mark
.
devtools
obiekt
Te typy określają strukturę obiektu devtools
w przypadku różnych funkcji rozszerzenia:
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
}
Wyświetlanie danych na osi czasu
Aby wyświetlić dane niestandardowe na osi czasu, w panelu Wydajność włącz to ustawienie:
Ustawienia rejestrowania > Pokaż ścieżki niestandardowe.Wypróbuj to na stronie demonstracyjnej. Rozpocznij nagrywanie wydajności, na stronie demonstracyjnej kliknij Dodaj nowego Corgi, a potem zatrzymaj nagrywanie. Na karcie Podsumowanie zobaczysz ścieżkę niestandardową, która zawiera zdarzenia z niestandardowymi etykietami i szczegółami.
Przykłady kodu
Oto kilka przykładów korzystania z interfejsu API do dodawania własnych danych do panelu Wydajność za pomocą każdego dostępnego mechanizmu.
console.timeStamp
Przykłady wywołań interfejsu API:
// Take a start timestamp
const start = performance.now();
// Measure duration from start to now
console.timeStamp("measure 1", start, undefined, "My Track", "My Group", "primary-light");
// Take an end timestamp
const end = performance.now();
// Measure duration from start to end
console.timeStamp("measure 2", start, end, "My Track", "My Group", "secondary-dark");
W związku z tym na osi czasu skuteczności pojawi się taki wpis dotyczący ścieżki niestandardowej:
Przykłady interfejsu User Timings API:
W kolejnych sekcjach znajdziesz przykłady kodu, które pokazują, jak dodać do osi czasu skuteczności te elementy:
Ścieżki i wpisy niestandardowe
Tworzenie ścieżek niestandardowych i wypełnianie ich wpisami w celu wizualizacji danych o skuteczności na ścieżce niestandardowej. Na przykład:
// Mark used to represent the start of the image processing task
// The start time is defaulted to now
const imageProcessinTimeStart = performance.now();
// ... 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: imageProcessinTimeStart,
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"
}
}
});
W związku z tym na osi czasu skuteczności pojawi się wpis dotyczący niestandardowego śledzenia wraz z tekstem i właściwościami etykietki:
Znaczniki
Podświetlaj wizualnie konkretne punkty na osi czasu za pomocą niestandardowych znaczników, które obejmują wszystkie ścieżki. Na przykład:
// 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"
}
}
});
W efekcie na ścieżce Czasy pojawi się ten znacznik wraz z tekstem i właściwościami w opisie: