Szybsza nawigacja w internecie dzięki predykcyjnemu pobieraniu z wyprzedzeniem

Dowiedz się więcej o pobieraniu prognozowanym i o tym, jak implementuje je Guess.js.

W ramach sesji Szybszej nawigacji w sieci z funkcją predykcyjnego pobierania z wyprzedzeniem na Google I/O 2019 rozpocząłem rozmowę o optymalizowaniu aplikacji internetowych za pomocą podziału kodu oraz potencjalnych wpływach na wydajność przy późniejszej nawigacji po stronach. W drugiej części rozmowy omówiliśmy, jak zwiększyć szybkość nawigacji za pomocą kodu Guess.js do skonfigurowania wstępnego pobierania z wyprzedzeniem:

Podział kodu w celu przyspieszenia działania aplikacji internetowych

Aplikacje internetowe są powolne, a JavaScript jest jednym z najdroższych zasobów, jakie wysyłasz. Oczekiwanie, aż aplikacja internetowa wolno się załaduje, może zniechęcić użytkowników i zmniejszyć liczbę konwersji.

Powolne działanie aplikacji internetowych jest stresujące.

Leniwe ładowanie to skuteczna technika ograniczania liczby bajtów kodu JavaScript przenoszonych przez sieć. Do leniwego ładowania kodu JavaScript możesz wykorzystać kilka metod, w tym:

  • Podział kodu na poziomie komponentu
  • Podział kodu na poziomie trasy

Dzieląc kod na poziomie komponentu, możesz przenosić poszczególne komponenty na osobne fragmenty kodu JavaScript. W przypadku określonych zdarzeń możesz wczytywać odpowiednie skrypty i renderować komponenty.

W przypadku podziału kodu na poziomie trasy przenosisz jednak całe trasy na niezależne fragmenty. Gdy użytkownicy przechodzą z jednej trasy na inną, muszą pobrać powiązany kod JavaScript i uruchomić żądaną stronę. Operacje te mogą powodować duże opóźnienia, zwłaszcza w przypadku powolnych sieci.

Pobieranie z wyprzedzeniem JavaScript

Pobieranie z wyprzedzeniem umożliwia przeglądarce pobieranie i buforowanie w pamięci podręcznej zasobów, które prawdopodobnie wkrótce będą potrzebne użytkownikowi. Zazwyczaj jest używana metoda <link rel="prefetch">, ale występują dwie częste problemy:

  • Pobieranie z wyprzedzeniem zbyt wielu zasobów (nadmierne pobieranie) powoduje zużywanie dużej ilości danych.
  • Niektóre zasoby, których potrzebuje użytkownik, mogą nigdy nie zostać wstępnie pobrane.

Pobieranie z wyprzedzeniem rozwiązuje te problemy, ponieważ korzysta z raportu o wzorcach nawigacyjnych użytkowników, aby określić, które zasoby pobierać z wyprzedzeniem.

Przykład pobierania z wyprzedzeniem

Pobieranie prognozowane z wyprzedzeniem za pomocą Guess.js

Guess.js to biblioteka JavaScript, która udostępnia funkcję pobierania z wyprzedzeniem. Kod Guess.js na podstawie raportu z Google Analytics lub innego dostawcy usług analitycznych tworzy model prognostyczny, który można wykorzystać do inteligentnego pobierania z wyprzedzeniem tylko tych informacji, które prawdopodobnie będą potrzebne użytkownikowi.

Guess.js ma integracje z Angular, Next.js, Nuxt.js i Gatsby. Aby używać go w swojej aplikacji, dodaj do konfiguracji pakietu internetowego te wiersze, aby określić identyfikator widoku danych Google Analytics:

const { GuessPlugin } = require('guess-webpack');

// ...
plugins: [
   // ...
   new GuessPlugin({ GA: 'XXXXXX' })
]
// ...

Jeśli nie korzystasz z Google Analytics, możesz określić reportProvider i pobrać dane z ulubionej usługi.

Integracja z platformami

Aby dowiedzieć się więcej o integrowaniu Guess.js z ulubioną platformą, zapoznaj się z tymi materiałami:

Aby zapoznać się z krótkim omówieniem integracji z Angular, obejrzyj ten film:

Jak działa Guess.js?

Oto jak Guess.js implementuje pobieranie prognozowane:

  1. Najpierw wyodrębnia ona dane o wzorcach nawigacji użytkowników od Twojego ulubionego dostawcy analityki.
  2. Następnie mapuje adresy URL z raportu na fragmenty JavaScriptu utworzone przez pakiet internetowy.
  3. Na podstawie wyodrębnionych danych tworzy prosty model prognostyczny określający, na które strony użytkownik prawdopodobnie przejdzie z danej strony.
  4. Wywołuje model dla każdego fragmentu JavaScriptu, prognozując inne fragmenty, które mogą być potrzebne w następnej kolejności.
  5. Dodaje instrukcje pobierania z wyprzedzeniem do każdego fragmentu.

Po zakończeniu kodu Guess.js każdy fragment będzie zawierał instrukcje pobierania z wyprzedzeniem podobne do tych:

__GUESS__.p(
  ['a.js', 0.2],
  ['b.js', 0.8]
)

Ten kod wygenerowany przez Guess.js informuje przeglądarkę, że ma rozważyć pobieranie z wyprzedzeniem fragmentu a.js z prawdopodobieństwem 0.2 i fragmentu b.js z prawdopodobieństwem 0.8.

Gdy przeglądarka wykona kod, Guess.js sprawdzi szybkość połączenia użytkownika. Jeśli to wystarczy, Guess.js wstawi w nagłówku strony 2 tagi <link rel="prefetch">, po jednym na każdy fragment. Jeśli użytkownik korzysta z szybkiej sieci, Guess.js pobierze wstępnie oba fragmenty. Jeśli użytkownik ma słabe połączenie sieciowe, Guess.js będzie pobierać z wyprzedzeniem tylko fragment b.js, ponieważ prawdopodobieństwo, że będzie on potrzebny, będzie wysokie.

Więcej

Aby dowiedzieć się więcej o tagu Guess.js, skorzystaj z tych materiałów: