Debugowanie reguł spekulacyjnych za pomocą Narzędzi deweloperskich w Chrome

Reguł spekulacyjnych można używać do wstępnego pobierania i renderowania stron nawigacyjnych na następnej stronie, jak opisano w poprzednim poście. Dzięki temu strona może wczytywać się znacznie szybciej – a nawet natychmiast – i znacznie poprawić podstawowe wskaźniki internetowe pod kątem dodatkowej nawigacji na stronie.

Debugowanie reguł spekulacyjnych może być trudne. Dotyczy to szczególnie wstępnie renderowanych stron, ponieważ są one renderowane w osobnym mechanizmie renderowania – podobnie jak ukryta karta w tle, która po aktywowaniu zastępuje bieżącą kartę. Dlatego nie zawsze można używać do debugowania problemów standardowych opcji Narzędzi deweloperskich.

Zespół Chrome ciężko pracuje nad ulepszeniem obsługi debugowania reguł spekulacyjnych w Narzędziach deweloperskich. W tym poście omówimy wszystkie sposoby korzystania z tych narzędzi, aby zrozumieć reguły spekulacyjne na stronie, dlaczego mogą one nie działać i kiedy deweloperzy mogą korzystać z bardziej znanych opcji Narzędzi deweloperskich, a kiedy nie.

Wyjaśnienie terminu „przed” warunki

Jest wiele „przed mylących terminów, dlatego zaczniemy od wyjaśnienia następujących kwestii:

  • Pobieranie z wyprzedzeniem: pobieranie zasobu lub dokumentu z wyprzedzeniem w celu zwiększenia wydajności w przyszłości. Ten post dotyczy wstępnego pobierania dokumentów za pomocą interfejsu Speculation Rules API, a nie podobnej, ale starszej opcji <link rel="prefetch">, która jest często używana do wstępnego pobierania zasobów podrzędnych.
  • Wstępne renderowanie: to krok poza pobieraniem z wyprzedzeniem i faktycznie renderuje całą stronę tak, jakby użytkownik mógł do niej przejść, ale pozostawia ją w ukrytym procesie renderowania w tle gotowym do użycia, gdy użytkownik faktycznie się tam otworzy. Ten dokument dotyczy nowszej wersji interfejsu Speculation Rules API, a nie starszej opcji <link rel="prerender"> (która nie wykonuje już pełnego renderowania wstępnego).
  • Spekulacje nawigacyjne: łączny termin nowych opcji pobierania z wyprzedzeniem i renderowania z wyprzedzeniem uruchamianych przez reguły spekulacyjne.
  • Wstępne wczytanie: przeciążony termin, który może oznaczać szereg technologii i procesów, takich jak <link rel="preload">, skaner wstępnego wczytywania i wstępne wczytywanie przez mechanizmy Service Worker. Nie będziemy tu omawiać tych kwestii, ale termin został uwzględniony, aby wyraźnie odróżnić je od „spekulacji nawigacyjnych”. .

Reguły spekulacyjne dla prefetch

Reguły spekulacyjne można wykorzystać do pobrania z wyprzedzeniem dokumentu następnej nawigacji. Jeśli na przykład wstawisz na stronie poniższy kod JSON, tagi next.html i next2.html zostaną wstępnie pobrane:

<script type="speculationrules">
  {
    "prefetch": [
      {
        "source": "list",
        "urls": ["next.html", "next2.html"]
      }
    ]
  }
</script>

Korzystanie z reguł spekulacyjnych do pobierania z wyprzedzeniem nawigacji ma pewne zalety w porównaniu ze starszą składnią <link rel="prefetch">, np. bardziej wyrazisty interfejs API i wyniki przechowywane w pamięci podręcznej pamięci zamiast w pamięci podręcznej dysku HTTP.

Debuguj reguły spekulacyjne typu prefetch

Pobieranie z wyprzedzeniem aktywowane przez reguły spekulacyjne można zobaczyć w panelu Sieć tak samo jak w przypadku innych pobrań:

Panel Sieć w Narzędziach deweloperskich w Chrome przedstawiający wstępnie pobrane dokumenty
Panel Sieć w Narzędziach deweloperskich w Chrome pokazujący pobrane z wyprzedzeniem dokumenty

Dwa żądania wyróżnione na czerwono to wstępnie pobrane zasoby, co widać w kolumnie Typ. Są one pobierane z priorytetem Lowest, ponieważ są stosowane na potrzeby przyszłej nawigacji, a Chrome nadaje priorytet zasobom bieżącej strony.

Kliknięcie jednego z wierszy powoduje też wyświetlenie nagłówka HTTP Sec-Purpose: prefetch, dzięki któremu można zidentyfikować te żądania po stronie serwera:

Pobieranie z wyprzedzeniem nagłówków przez Narzędzia deweloperskie w Chrome z funkcją Sec-Reason ustawionym na pobieranie z wyprzedzeniem
Pobieranie z wyprzedzeniem nagłówków w Narzędziach deweloperskich w Chrome z funkcją Sec-Reason ustawionym na pobieranie z wyprzedzeniem

Debuguj interfejs prefetch za pomocą kart wczytywania spekulacyjnego

W sekcji Usługi w tle w panelu Aplikacja w Narzędziach deweloperskich w Chrome dodaliśmy nową sekcję Ładowanie spekulacyjne, która ma pomóc w debugowaniu reguł spekulacyjnych:

Karty ładowania spekulacyjnego w Narzędziach deweloperskich w Chrome przedstawiające regułę pobierania z wyprzedzeniem
Karty ładowania spekulacyjnego w Narzędziach deweloperskich w Chrome pokazujące regułę pobierania z wyprzedzeniem

W tej sekcji dostępne są 3 karty:

  • Wczytywanie spekulacyjne z informacją o wstępnie wyrenderowanym stanie bieżącej strony.
  • Reguły – lista wszystkich zestawów reguł znalezionych na bieżącej stronie.
  • Spekulacje obejmujące wszystkie wstępnie pobrane i wyrenderowane adresy URL z zestawów reguł.

Karta Spekulacje widoczna na poprzednim zrzucie ekranu – jak widzimy, na tej przykładowej stronie znajduje się pojedynczy zestaw reguł spekulacyjnych do wstępnego wczytywania 3 stron. 2 z tych pobrań z wyprzedzeniem się udało, a 1 nie udało się. Kliknij ikonę obok opcji Zestaw reguł, aby przejść do źródła zestawu reguł w panelu Elementy. Możesz też kliknąć link Stan, aby przejść do karty Spekulacje przefiltrowanej zgodnie z tym zestawem reguł.

Na karcie Spekulacje znajdziesz wszystkie docelowe adresy URL, wraz z działaniem (wstępne pobieranie lub renderowanie wstępne), zestawem reguł, z którego pochodzą (ponieważ może być ich wiele na stronie) oraz stanem każdej spekulacji:

Karta spekulacje w Narzędziach deweloperskich w Chrome z wstępnie pobranymi adresami URL i ich stanem
Karta Spekulacje w Narzędziach deweloperskich w Chrome zawierająca wstępnie pobrane adresy URL wraz z ich stanem

Za pomocą menu nad adresami URL można wyświetlić adresy URL ze wszystkich zestawów reguł lub tylko z konkretnego zestawu. Poniżej wymienione są wszystkie adresy URL. Po kliknięciu adresu URL uzyskasz bardziej szczegółowe informacje.

Na tym zrzucie ekranu widać przyczynę błędu strony next3.html (która nie istnieje i dlatego zwraca kod stanu HTTP inny niż 2xx).

Karta podsumowania Ładowania spekulacyjne zawiera raport Stan ładowania spekulacyjnego tej strony, który pokazuje, czy w przypadku tej strony użyto wstępnego pobierania lub renderowania z wyprzedzeniem.

W przypadku wstępnie wczytanej strony powinien pojawić się komunikat o udanym przeprowadzeniu operacji:

Karta spekulacyjnych ładowań spekulacyjnych w Narzędziach deweloperskich w Chrome pokazująca udane pobieranie z wyprzedzeniem
Karta spekulacyjnego ładowania spekulacyjnego w Narzędziach deweloperskich w Chrome pokazująca udane pobieranie z wyprzedzeniem

Niedopasowane spekulacje

Gdy nawigacja odbywa się ze strony z regułami spekulacyjnymi, która nie skutkuje użyciem wstępnego pobierania ani renderowania z wyprzedzeniem, w dodatkowej sekcji karty pojawią się szczegółowe informacje o tym, dlaczego adres URL nie pasuje do żadnego z adresów URL spekulacyjnych. Przydaje się to do wykrywania literówek w regułach spekulacyjnych.

Karta ładowania spekulacyjnego w Narzędziach deweloperskich w Chrome, która pokazuje, dlaczego bieżący adres URL nie pasuje do żadnego z adresów URL w regułach spekulacyjnych poprzedniej strony
Niedopasowane adresy URL są wyróżniane w Narzędziach deweloperskich

Na przykład doszliśmy do reguły next4.html, ale tylko next.html, next2.html lub next3.html to pobrania z wyprzedzeniem, więc widzimy, że ta wartość nie pasuje do żadnej z tych 3 reguł.

Karty Wczytywanie spekulacyjne są bardzo przydatne przy debugowaniu samych reguł spekulacyjnych i znajdowaniu błędów składni w pliku JSON.

Panel Sieć jest prawdopodobnie bardziej znany. W przypadku przykładowego niepowodzenia pobierania z wyprzedzeniem kod 404 dla pobierania z wyprzedzeniem jest widoczny tutaj:

Panel sieci w Narzędziach deweloperskich w Chrome pokazujący nieudane pobieranie z wyprzedzeniem
Nieudane pobieranie z wyprzedzeniem w panelu Sieć w Narzędziach deweloperskich w Chrome

Jednak karty Ładowania spekulacyjne stają się znacznie bardziej przydatne przy regułach spekulacyjnych renderowania wstępnego, które opisujemy w dalszej części tego artykułu.

Reguły spekulacyjne dla prerender

Reguły spekulacji wstępnego renderowania mają tę samą składnię co reguły spekulacji pobierania z wyprzedzeniem. Na przykład:

<script type="speculationrules">
  {
    "prerender": [
      {
        "source": "list",
        "urls": ["next.html", "next2.html"]
      }
    ]
  }
</script>

Ten zestaw reguł aktywuje pełne wczytanie i renderowanie określonych stron (z pewnymi ograniczeniami). Umożliwia to błyskawiczne wczytywanie, ale wiąże się z dodatkowymi kosztami zasobów.

W przeciwieństwie do pobierania z wyprzedzeniem nie są one widoczne w panelu Sieć, ponieważ są pobierane i renderowane w osobnym procesie renderowania w Chrome. Dzięki temu karty Ładowania spekulacyjne mają większe znaczenie przy debugowaniu reguł spekulacyjnych renderowania wstępnego.

Debuguj interfejs prerender za pomocą kart wczytywania spekulacyjnego

W przypadku reguł spekulacyjnych renderowania z wyprzedzeniem można używać tych samych ekranów wczytywania spekulacyjnych, co przedstawiono w przypadku podobnej strony demonstracyjnej, która próbuje wyrenderować z wyprzedzeniem trzy strony:

Spekulacyjne ładowanie kart w Narzędziach deweloperskich w Chrome na stronie z regułami spekulacji wstępnego renderowania
Spekulacyjne w Narzędziach deweloperskich w Chrome wczytuje karty strony z regułami spekulacji wstępnego renderowania

Widzimy, że nie udało się wstępnie wyrenderować jednego z 3 adresów URL, a deweloperzy mogą uzyskać szczegółowe informacje na temat każdego adresu URL na karcie Spekulacje, klikając link 2 gotowe, 1 niepowodzenie.

W Chrome 121 wprowadziliśmy obsługę reguł dokumentów. Dzięki temu przeglądarka może pobrać te linki z tego samego źródła linków na stronie, zamiast wyświetlać listę konkretnego zestawu adresów URL:

<script type="speculationrules">
{
  "prerender": [
    {
      "source": "document",
      "where": {
        "and": [
          {"href_matches": "/*"},
          {"not": { "href_matches": "/not-safe-to-prerender/*"}}
        ]
      },
      "eagerness": "moderate"
    }
  ]
}
</script>

W tym przykładzie jako kandydatów w renderowaniu wstępnym wybierane są wszystkie połączenia z tym samym punktem początkowym z wyjątkiem tych zaczynających się od /not-safe-to-prerender.

Ustawia też renderowanie wstępne eagerness na moderate, co oznacza, że elementy nawigacyjne są wstępnie renderowane po najechaniu kursorem na link lub kliknięciu go.

Podobne reguły znajdują się na stronie demonstracyjnej reguł spekulacyjnych. Korzystanie z nowej sekcji Wczytywanie spekulacyjne pokazuje przydatność tej nowej karty, ponieważ wymienione są wszystkie odpowiednie adresy URL znalezione przez przeglądarkę na stronie:

Karta spekulacje w Narzędziach deweloperskich w Chrome z kilkoma nieuruchomionymi adresami URL
Karta spekulacje w Narzędziach deweloperskich w Chrome z kilkoma nieuruchomionymi adresami URL

Stan to Nie aktywowano, ponieważ proces renderowania wstępnego w przypadku tych zasobów jeszcze się nie rozpoczął. Gdy jednak najeżdżamy kursorem na linki, zmienia się ich stan w miarę wstępnego renderowania adresu URL:

Karta spekulacje w Narzędziach deweloperskich w Chrome z aktywowanymi wstępnie wyrenderowanymi stronami
Karta spekulacje w Narzędziach deweloperskich w Chrome z aktywowanym wstępnie renderowanymi stronami

W Chrome ustalono limity renderowania wstępnego, w tym maksymalnie 2 z niecierpliwością moderate. Po najechaniu kursorem na trzeci link pokazujemy przyczynę niepowodzenia dla tego adresu URL:

Karta spekulacje w Narzędziach deweloperskich w Chrome z wyświetloną informacją o nieudanych wstępnych wczytywaniach
Karta spekulacje w Narzędziach deweloperskich w Chrome z wyświetloną informacją o nieudanych wstępnych wczytywaniach

Debuguj prerender z innymi panelami Narzędzi deweloperskich

W przeciwieństwie do pobierania z wyprzedzeniem strony, które zostały wyrenderowane z wyprzedzeniem, nie będą widoczne w bieżących procesach renderowania w panelach Narzędzi deweloperskich, takich jak panel Network, ponieważ są renderowane we własnym, zakulisowym mechanizmie renderowania.

Obecnie można jednak przełączyć mechanizm renderowania używany w panelach Narzędzi deweloperskich, korzystając z menu w prawym górnym rogu lub wybierając adres URL w górnej części panelu i klikając Zbadaj:

Narzędzia deweloperskie w Chrome umożliwiają teraz przełączanie mechanizmów renderowania, o których wyświetlane są informacje
Narzędzia deweloperskie w Chrome umożliwiają teraz przełączanie mechanizmów renderowania, w przypadku których wyświetlane są informacje

To menu (i wybrana wartość) jest wspólne dla wszystkich pozostałych paneli, np. panelu Sieć, w którym widać, że żądana strona jest wstępnie renderowana:

Panel sieci w Narzędziach deweloperskich w Chrome przedstawiający żądania sieciowe dla wstępnie renderowanej strony
Panel Sieć w Narzędziach deweloperskich w Chrome przedstawiający żądania sieciowe dla wstępnie renderowanej strony

Przeglądając nagłówki HTTP tych zasobów, widzimy, że wszystkie będą ustawione za pomocą nagłówka Sec-Purpose: prefetch;prerender:

Panel sieci w Narzędziach deweloperskich w Chrome z nagłówkiem Sec-Reason dla wstępnie renderowanej strony
Panel Network (Sieć) w Narzędziach deweloperskich w Chrome z nagłówkiem Sec-Reason dla wstępnie renderowanej strony

lub w panelu Elementy, gdzie widać zawartość strony – jak na zrzucie ekranu poniżej, gdzie element <h1> dotyczy wstępnie renderowanej strony:

Panel elementów Narzędzi deweloperskich w Chrome dla wstępnie renderowanej strony
Panel elementów Narzędzi deweloperskich w Chrome na wstępnie renderowanej stronie

W przeciwnym razie możesz skorzystać z panelu konsoli, w którym możesz zobaczyć logi konsoli wygenerowane przez wstępnie renderowaną stronę:

Panel konsoli w Narzędziach deweloperskich w Chrome przedstawiający dane wyjściowe konsoli ze wstępnie renderowanej strony
Panel konsoli w Narzędziach deweloperskich w Chrome przedstawiający dane wyjściowe konsoli ze wstępnie wyrenderowanej strony

Debuguj reguły spekulacyjne na wstępnie renderowanej stronie

W poprzednich sekcjach opisano sposób debugowania wstępnie renderowanych stron na stronie, która inicjuje renderowanie wstępne. Możliwe jest jednak również, że same wstępnie renderowane strony mogą dostarczać dane debugowania przez wywołanie analityki lub logowanie w konsoli (co można wyświetlić w sposób opisany w poprzedniej sekcji).

Dodatkowo, gdy użytkownik aktywuje wstępnie wyrenderowaną stronę, na karcie Ładowania spekulacyjne będzie widoczny ten stan z informacją o tym, czy została ona wstępnie wyrenderowana. Jeśli nie udało się wyrenderować wstępnie wyjaśnienia, dlaczego tak było:

Karta ładowania spekulacyjnego w Narzędziach deweloperskich w Chrome z wstępnie wyrenderowaną stroną udaną i nieudaną
Karta spekulacyjnego ładowania spekulacyjnego w Narzędziach deweloperskich w Chrome z wstępnie wyrenderowaną i nieudaną stroną

Dodatkowo, tak jak w przypadku pobierania z wyprzedzeniem, nawigowanie ze strony z regułami spekulacyjnymi, które nie są zgodne z bieżącą stroną, spowoduje próbę sprawdzenia, dlaczego adresy URL nie pasują do reguł spekulacyjnych dotyczących poprzedniej strony na karcie Wczytywanie spekulacyjne:

Karta ładowania spekulacyjnego w Narzędziach deweloperskich w Chrome, na której wyświetla się niezgodność adresu URL bieżącego i poprzedniego
Narzędzia deweloperskie w Chrome pokazujące niezgodności URL-i

Podsumowanie

W tym poście pokazaliśmy różne sposoby debugowania przez deweloperów reguł spekulacyjnych pobierania z wyprzedzeniem i renderowania z wyprzedzeniem. Zespół cały czas pracuje nad narzędziami do reguł spekulacyjnych i chętnie poznamy sugestie deweloperów na temat tego, jakie inne sposoby mogłyby pomóc w debugowaniu tego nowego interfejsu API. Zachęcamy deweloperów, aby zgłaszali problem w narzędziu do śledzenia problemów w Chrome w przypadku wszelkich zauważonych błędów i prośb o dodanie funkcji.

Podziękowania

Zdjęcie: Nubelson Fernandes na temat Unsplash.