Wyodrębnianie i wbudowanie krytycznego kodu CSS za pomocą wartości krytycznej

Niezależnie od tego, czy korzystasz z biblioteki interfejsu użytkownika, czy samodzielnie tworzysz style, znaczne opóźnienia renderowania CSS, ponieważ przeglądarka musi pobrać i przeanalizować pliki CSS, zanim będzie mogła wyświetlić stronę.

Ta elastyczna lodziarnia powstała przy użyciu narzędzia Bootstrap. Biblioteki UI, takie jak Bootstrap, przyspieszają programowanie, ale często kosztują nadmiarowe i niepotrzebne pliki CSS, które mogą spowolnić wczytywanie. Plik rozruchowy 4 ma 187 KB, a interfejs semantyczny, czyli inna biblioteka interfejsu, ma aż 730 KB po zdekompresowaniu. Nawet po zmniejszeniu i skompresowaniu gzip bootstrap nadal waży około 20 KB, czyli znacznie powyżej progu 14 KB w przypadku pierwszej sesji w obie strony.

Krytyczne to narzędzie, które wyodrębnia, minifikuje i umieszcza kod CSS w części strony widocznej na ekranie. Umożliwia to szybsze wyrenderowanie części strony widocznej na ekranie, nawet jeśli kod CSS innych części strony nie został jeszcze wczytany. Z tego ćwiczenia w programowaniu dowiesz się, jak korzystać z modułu npm usługi krytycznej.

Zmierz odległość

  • Aby wyświetlić podgląd strony, kliknij Wyświetl aplikację, a potem Pełny ekran pełny ekran.

Aby przeprowadzić audyt Lighthouse w tej witrynie:

  1. Naciśnij „Control + Shift + J” (lub „Command + Option + J” na Macu), aby otworzyć Narzędzia deweloperskie.
  2. Kliknij kartę Lighthouse.
  3. Kliknij Urządzenia mobilne.
  4. Zaznacz pole wyboru Wydajność.
  5. Odznacz pozostałe pola wyboru w sekcji Audyty.
  6. Kliknij Symuld Fast 3G, 4x CPU Spowolnienie.
  7. Zaznacz pole wyboru Wyczyść pamięć wewnętrzną. Jeśli wybierzesz tę opcję, Lighthouse nie będzie wczytywać zasobów z pamięci podręcznej, co symuluje działanie strony po raz pierwszy.
  8. Kliknij Przeprowadź audyty.

Panel audytów Narzędzi deweloperskich w Chrome, oparty na technologii Lighthouse

Po przeprowadzeniu kontroli na komputerze dokładne wyniki mogą się różnić, ale w widoku taśmy filmowej zauważysz, że aplikacja jest przez dłuższy czas pusta przed wyrenderowaniem treści. Dlatego właśnie wskaźnik pierwszego wyrenderowania treści (FCP) jest wysoki i dlaczego ogólny wynik skuteczności jest słaby.

Audyt narzędzia Lighthouse: wynik wydajności wynoszący 84 FCP, 3 sekundy FCP i widok paska zdjęć z wczytywania aplikacji

Narzędzie Lighthouse pomoże Ci rozwiązać problemy z wydajnością. Poszukaj rozwiązań w sekcji Możliwości. Wyeliminuj zasoby blokujące renderowanie, które są wymienione jako możliwość. Właśnie tu kluczowa jest krytyczne.

Audyt Lighthouse w sekcji „Możliwości” z listą „Wyeliminuj zasoby blokujące renderowanie”

Optymalizuj

  • Aby umożliwić edytowanie projektu, kliknij Zremiksuj do edycji.

Aby przyspieszyć działanie, zadanie krytyczne jest już zainstalowane, a ćwiczenia z programowania zawierają pusty plik konfiguracji.

W pliku konfiguracji critical.js dodaj odniesienie do wartości krytyczne, a następnie wywołaj funkcję critical.generate(). Ta funkcja akceptuje obiekt zawierający konfigurację.

const critical = require('critical');

critical.generate({
    // configuration
},(err, output) => {
  if (err) {
    console.error(err);
  } else if (output) {
    console.log('Generated critical CSS');
  }
});

Obsługa błędów nie jest obowiązkowa, ale jest to prosty sposób na zmierzenie powodzenia operacji w konsoli.

Skonfiguruj krytyczne

Poniższa tabela zawiera kilka przydatnych opcji krytycznych. Wszystkie dostępne opcje znajdziesz na GitHubie.

Option Typ Wyjaśnienie
base string, Katalog podstawowy plików.
src string, Plik źródłowy HTML.
dest string, Cel pliku wyjściowego. Jeśli CSS jest wbudowany, plik wyjściowy będzie HTML. W przeciwnym razie wynikiem będzie plik CSS.
width, height numery Szerokość i wysokość widocznego obszaru w pikselach.
dimensions tablica Zawiera obiekty o właściwościach szerokości i wysokości. Obiekty te reprezentują widoczne obszary, na które chcesz kierować reklamy za pomocą kodu CSS wyświetlanego w części strony widocznej na ekranie. Jeśli w CSS masz zapytania o media, możesz wygenerować krytyczny kod CSS obejmujący wiele rozmiarów widocznego obszaru.
inline boolean Jeśli zasada ma wartość Prawda, wygenerowany krytyczny kod CSS jest wbudowany w źródłowy plik HTML.
minify boolean Gdy ma wartość Prawda, krytyczna minifikuje wygenerowany krytyczny kod CSS. Można ją pominąć przy wyodrębnianiu krytycznego kodu CSS dla wielu rozdzielczości, ponieważ ustawienia krytyczne są automatycznie minimalizowane, co zapobiega uwzględnianiu zduplikowanej reguły.

Poniżej znajdziesz przykład konfiguracji wyodrębniania kluczowego kodu CSS w przypadku wielu rozdzielczości. Dodaj ją do critical.js lub wypróbuj i zmień opcje.

critical.generate({
  base: 'public/',
  src: './index.html',
  dest: './index.html',
  inline: true,
  dimensions: [
    {
      height: 500,
      width: 300,
    },
    {
      height: 720,
      width: 1280,
    },
  ]
}, (err, output) => {
  if (err) {
    console.error(err);
  } else if (output) {
    console.log('Generated critical CSS');
  }
});

W tym przykładzie index.html jest zarówno plikiem źródłowym, jak i docelowym, ponieważ opcja inline ma wartość Prawda. Krytyczne odczytuje najpierw plik źródłowy HTML, wyodrębnia krytyczny kod CSS, a następnie zastępuje index.html z krytycznym kodem CSS wstawionym w elemencie <head>.

W tablicy dimensions określono 2 rozmiary widocznego obszaru: 300 x 500 w przypadku dodatkowych małych ekranów i 1280 x 720 w przypadku standardowych ekranów laptopów.

Opcja minify jest pomijana, ponieważ wartość Krytyczna automatycznie minimalizuje wyodrębniony kod CSS, gdy określono wiele rozmiarów widocznego obszaru.

Uruchom krytycznie

Dodaj do skryptów w aplikacji package.json kartę krytyczne:

scripts: {
  "start": "node server.js",
  "critical": "node critical.js"
}
  1. Kliknij Terminal (uwaga: jeśli nie widać przycisku terminala, może być konieczne użycie opcji pełnego ekranu).

Aby wygenerować krytyczny kod CSS, w konsoli uruchom polecenie:

npm run critical
refresh
Komunikat o powodzeniu w konsoli: „Wygenerowano krytyczny kod CSS”
Komunikat o powodzeniem w konsoli

Teraz w tagu <head> elementu index.html wygenerowany krytyczny kod CSS jest umieszczony między tagami <style>, po którym następuje skrypt, który asynchronicznie wczytuje pozostałą część kodu CSS.

index.html z zawartym w nim krytycznym kodem CSS
Kluczowy kod CSS w tekście

Przeprowadź pomiar ponownie

Wykonaj instrukcje podane na początku ćwiczenia z programowania, aby ponownie uruchomić kontrolę wydajności w Lighthouse. Wyniki będą podobne do tych:

Audyt narzędzia Lighthouse: wynik wydajności na poziomie 100, FCP 0,9 sekundy i ulepszony widok paska zdjęć podczas wczytywania aplikacji