Efektywne wczytywanie kodu JavaScript innej firmy

Jeśli skrypt innej firmy spowalnia wczytywanie strony, możesz poprawić wydajność na 2 sposoby:

  • Usuń je, jeśli nie wnosi on wyraźnej wartości dla Twojej witryny.
  • Zoptymalizuj proces wczytywania.

Z tego artykułu dowiesz się, jak zoptymalizować proces wczytywania skryptów innych firm za pomocą tych technik:

  • Używanie atrybutu async lub defer w tagach <script>
  • Nawiązuję wczesne połączenia z wymaganymi źródłami
  • Leniwe ładowanie
  • Optymalizacja sposobu obsługi skryptów innych firm

Użyj formy płatności async lub defer

Ponieważ skrypty synchroniczne opóźniają konstrukcję i renderowanie DOM, należy zawsze wczytywać skrypty innych firm asynchronicznie, chyba że muszą zostać uruchomione przed wyrenderowaniem strony.

Atrybuty async i defer informują przeglądarkę, że może ona analizować kod HTML podczas wczytywania skryptu w tle, a potem wykonywać go po załadowaniu. Dzięki temu pobieranie skryptów nie blokuje konstrukcji DOM ani renderowania stron, umożliwiając użytkownikowi wyświetlenie strony, zanim wszystkie skrypty zostaną wczytane.

<script async src="script.js">

<script defer src="script.js">

Różnica między atrybutami async i defer polega na tym, kiedy przeglądarka wykonuje skrypty.

async

Skrypty z atrybutem async są wykonywane przy pierwszej okazji po zakończeniu pobierania i przed zdarzeniem load w oknie. Oznacza to, że istnieje możliwość (i prawdopodobnie), że skrypty async nie będą uruchamiane w kolejności, w jakiej występują w kodzie HTML. Oznacza to również, że mogą przerwać tworzenie DOM, jeśli pobieranie zostanie ukończone, gdy parser nadal będzie działać.

Schemat skryptu blokującego parsera z atrybutem async
Skrypty z tagiem async mogą nadal blokować analizę HTML.

defer

Skrypty z atrybutem defer są wykonywane po całkowitym zakończeniu analizy HTML, ale przed zdarzeniem DOMContentLoaded. defer dba o to, aby skrypty były uruchamiane w kolejności, w jakiej występują w kodzie HTML, i nie blokują parsera.

Schemat przepływu parsera ze skryptem z atrybutem opóźnienia
Skrypty z parametrem defer oczekują na uruchomienie, aż przeglądarka zakończy analizowanie kodu HTML.
  • Wybierz async, jeśli chcesz, aby skrypt został uruchomiony wcześniej w procesie wczytywania.
  • Uwzględnij defer w przypadku mniej ważnych zasobów, np. odtwarzacza znajdującego się w części strony widocznej po przewinięciu.

Użycie tych atrybutów może znacznie przyspieszyć wczytywanie strony. Na przykład firma Telegraph odroczyła wszystkie skrypty, w tym reklamy i statystyki, oraz skróciła czas wczytywania reklam średnio o 4 sekundy.

Nawiązuj wczesne połączenia z wymaganymi źródłami

Możesz zaoszczędzić 100–500 ms przez nawiązanie wczesnych połączeń z ważnymi źródłami zewnętrznymi.

Pomoc dotyczącą 2 typów <link> (preconnect i dns-prefetch):

preconnect

<link rel="preconnect"> informuje przeglądarkę, że strona chce połączyć się z innym źródłem i że chcesz jak najszybciej rozpocząć ten proces. Gdy przeglądarka poprosi o zasób z wcześniej połączonego punktu początkowego, pobieranie rozpocznie się natychmiast.

<link rel="preconnect" href="https://cdn.example.com">

dns-prefetch

<link rel="dns-prefetch> obsługuje niewielką część tego, co obsługuje <link rel="preconnect">. Nawiązywanie połączenia obejmuje wyszukiwanie DNS i uzgadnianie połączenia TCP, a w przypadku bezpiecznych źródeł negocjacje TLS. dns-prefetch informuje przeglądarkę, aby rozwiązywała tylko DNS określonej domeny, zanim zostanie ona wywołana.

Wskazówka preconnect jest najbardziej przydatna w przypadku najważniejszych połączeń. W przypadku mniej ważnych domen zewnętrznych użyj <link rel=dns-prefetch>.

<link rel="dns-prefetch" href="http://example.com">

Obsługa przeglądarek dns-prefetch różni się nieco od obsługi preconnect, więc dns-prefetch może służyć jako rozwiązanie zastępcze dla przeglądarek, które nie obsługują preconnect. Aby bezpiecznie wdrożyć tę funkcję, użyj osobnych tagów linków:

<link rel="preconnect" href="http://example.com">
<link rel="dns-prefetch" href="http://example.com">

Leniwe ładowanie zasobów z innych witryn

Umieszczone zasoby innych firm mogą znacznie spowalniać wczytywanie stron, jeśli są źle skonstruowane. Jeśli nie są one kluczowe lub znajdują się poniżej linii przewijania (czyli użytkownicy muszą przewinąć stronę, aby je zobaczyć), opóźnione wczytywanie jest dobrym sposobem na poprawę szybkości strony i wskaźników związanych z renderowaniem. Dzięki temu użytkownicy szybciej uzyskują dostęp do treści na stronie głównej i mają lepsze wrażenia.

Schemat strony internetowej widoczny na urządzeniu mobilnym z treścią, którą można przewijać, wychodzącą poza ekran. Zawartość części strony widocznej po przewinięciu ma negatywny wpływ na jej nasycenie, ponieważ nie została jeszcze wczytana.
Leniwe ładowanie treści w części strony widocznej po przewinięciu.

Jednym z skutecznych sposobów jest opóźnione wczytywanie treści zewnętrznych po załadowaniu treści głównej strony. Reklamy są dobrym kandydatem do tego podejścia.

Reklamy są ważnym źródłem przychodów dla wielu witryn, ale użytkownicy odwiedzają je ze względu na treści. Leniwe ładowanie reklam i szybsze wyświetlanie głównej treści może zwiększyć ogólny odsetek widoczności reklamy. Na przykład firma MediaVine zaczęła używać reklam leniwego ładowania i odnotowała wzrost szybkości wczytywania stron o 200%. W usłudze Google Ad Manager znajdziesz dokumentację dotyczącą opóźnionego wczytywania reklam.

Możesz też ustawić, aby treści innych firm wczytywały się tylko wtedy, gdy użytkownicy po raz pierwszy przewiną do tej sekcji strony.

Intersection Observer to interfejs API przeglądarki, który skutecznie wykrywa, kiedy element wchodzi lub wychodzi z widocznego obszaru przeglądarki. Możesz go użyć do implementacji tej techniki. lazysizes to popularna biblioteka JavaScriptu do ładowania opóźnionego obrazów i iframes. Obsługuje on elementy osadzone i widżety z YouTube. Ma też opcjonalną obsługę Intersection Observer.

Użycie atrybutu loading do leniwego ładowania obrazów oraz elementów iframe to doskonała alternatywa dla technik JavaScript. Od niedawna jest on dostępny w Chrome 76.

Optymalizacja sposobu obsługi skryptów zewnętrznych

Poniżej znajdziesz kilka zalecanych strategii optymalizacji korzystania ze skryptów zewnętrznych.

Hosting CDN firmy zewnętrznej

Dostawcy zewnętrzni często podają adresy URL plików JavaScript, które hostują, zwykle w sieci dystrybucji treści (CDN). Zaletą tej metody jest to, że możesz szybko rozpocząć pracę – wystarczy skopiować i wkleić adres URL – i nie musisz poświęcać czasu na konserwację. Dostawca zewnętrzny zajmuje się konfiguracją serwera i aktualizacjami skryptów.

Ponieważ jednak nie znajdują się one w tej samej domenie co pozostałe zasoby, wczytywanie plików z publicznego CDN wiąże się z kosztami sieciowymi. Przeglądarka musi przeprowadzić wyszukiwanie DNS, nawiązać nowe połączenie HTTP, a w przypadku bezpiecznych źródeł nawiązać połączenie SSL z serwerem dostawcy.

Gdy korzystasz z plików na serwerach innych firm, rzadko masz kontrolę nad pamięcią podręczną. Jeśli polegasz na strategii buforowania innej osoby, skrypty są niepotrzebnie pobierane z sieci zbyt często.

Hostowanie skryptów innych firm

Samohostujące skrypty innych firm to opcja, która daje Ci większą kontrolę nad procesem wczytywania skryptu. Dzięki samodzielnemu hostowaniu możesz:

  • Skrócenie czasu wyszukiwania DNS i przesyłania danych w obie strony.
  • Popraw nagłówki buforowania HTTP.
  • Korzystaj z protokołu HTTP/2 lub nowszego HTTP/3.

Przykład: firmie Casper udało się skrócić czas wczytywania o 1, 7 sekundy dzięki samodzielnym hostowaniu skryptu do testów A/B.

Samodzielny hosting ma jednak jedną olbrzymią wadę: skrypty mogą stać się nieaktualne i nie będą otrzymywać automatycznych aktualizacji, gdy zmieni się interfejs API lub zostanie poprawka zabezpieczeń.

Korzystanie z serwisów workerów do przechowywania w pamięci podręcznej skryptów z serwerów zewnętrznych

Jako alternatywę dla hostowania własnego możesz użyć serwisów workerów do przechowywania w pamięci podręcznej skryptów z serwerów innych firm. Daje Ci to większą kontrolę nad buforowaniem, zachowując jednocześnie korzyści płynące z zewnętrznych sieci CDN.

Możesz kontrolować, jak często skrypty są ponownie pobierane z sieci, oraz utworzyć strategię wczytywania, która ogranicza żądania mniej ważnych zasobów innych firm do momentu, aż użytkownik dotrze do kluczowej interakcji na stronie. Dzięki preconnect możesz nawiązywać wczesne połączenia i zmniejszać koszty sieci.