Efektywne wczytywanie kodu JavaScript innej firmy

Jeśli skrypt innej firmy spowalnia Twoją podczas wczytywania strony możesz zwiększyć wydajność na dwa sposoby:

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

Z tego posta dowiesz się, jak zoptymalizować proces wczytywania skryptów zewnętrznych. za pomocą poniższych metod:

  • 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ą DOM. podczas tworzenia i renderowania, należy zawsze ładować skrypty innych firm asynchronicznie, chyba że skrypt musi zostać uruchomiony przed wyrenderowaniem strony.

Atrybuty async i defer informują przeglądarkę, że może przejść do analizy kodu HTML podczas wczytywania skryptu w tle, a następnie wykonać go po załadowaniu. Dzięki temu pobrane skrypty nie blokują konstrukcji DOM ani strony. renderowanie, dzięki czemu użytkownik zobaczy stronę, zanim wszystkie skrypty zostaną ukończone wczytuję.

<script async src="script.js">

<script defer src="script.js">

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

async

Skrypty z atrybutem async są wykonywane przy pierwszej możliwości po dokończ pobieranie i przed wyświetleniem okna load. Oznacza to, że możliwe, że skrypty async nie będą uruchamiane w kolejności, w której pojawia się w kodzie HTML. Oznacza to również, że mogą przerywać tworzenie DOM, jeśli dokończ pobieranie, gdy parser nadal działa.

Schemat skryptu blokującego parser z atrybutem asynchronicznym
Skrypty z atrybutem async mogą nadal blokować Analiza kodu HTML.

defer

Skrypty z atrybutem defer są wykonywane po zakończeniu analizy HTML ale przed zakończeniem DOMContentLoaded. . defer zapewnia uruchamianie skryptów w kolejności, w jakiej występują w kodzie HTML nie blokuj parsera.

Schemat przepływu parsera ze skryptem z atrybutem opóźnienia
Skrypty z defer oczekują na uruchomienie do przeglądarka zakończy analizowanie kodu HTML.
  • Wybierz async, jeśli chcesz, aby skrypt był uruchamiany na wcześniejszym etapie wczytywania proces tworzenia konta.
  • Użyj zasady defer w przypadku mniej ważnych zasobów, takich jak poniższy odtwarzacz Część strony widoczna na ekranie.

Użycie tych atrybutów może znacznie przyspieszyć wczytywanie strony. Przykład: Telegraph odroczył wszystkie skrypty, obejmujący reklamy i analitykę, oraz skrócił czas wczytywania reklam o średnio 4 sekundy.

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

Jeśli chcesz zaoszczędzić 100–500 ms, nawiązywanie wczesnych kontaktów ważnych źródeł zewnętrznych.

2 typy <link>, preconnect i dns-prefetch mogą pomóc w tych kwestiach:

preconnect

<link rel="preconnect"> informuje przeglądarkę, że strona chce utworzyć połączenie z innym punktem początkowym i chcesz, aby ten proces jak najszybciej się rozpoczął jak to tylko możliwe. Gdy przeglądarka wysyła żądanie zasobu 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 niewielki podzbiór danych, <link rel="preconnect"> nicka. Nawiązanie połączenia wymaga użycia systemu DNS wyszukiwanie i uzgadnianie połączenia TCP, a w przypadku bezpiecznych źródeł – negocjacje TLS. dns-prefetch informuje przeglądarkę, że ma wyszukiwać DNS tylko dla konkretnej domeny, zanim zostanie jawnie wywołana.

Wskazówka preconnect działa najlepiej tylko w przypadku najważniejszych połączeń. Dla: mniej ważne domeny zewnętrzne, użyj <link rel=dns-prefetch>.

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

Obsługa przeglądarek w dns-prefetch różni się nieco od pomocy preconnect, więc dns-prefetch może służyć jako element zastępczy w przeglądarkach, które nie obsługują preconnect. Aby to bezpiecznie wdrożyć, użyj osobnych tagów linku:

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

Leniwe ładowanie zasobów innych firm

Umieszczone zasoby innych firm mogą znacznie spowolnić wczytywanie strony, jeśli są kiepsko skonstruowane. Jeśli nie są kluczowe lub znajdują się w części strony widocznej po przewinięciu (czyli jeśli użytkownik musi je przewinąć), leniwe ładowanie poprawić szybkość działania strony i wskaźniki renderowania. Dzięki temu użytkownicy widzą zawartość strony głównej szybsze działanie i łatwiejszy kontakt z urządzeniami.

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.

Jedną ze skutecznych metod jest leniwe ładowanie treści osób trzecich po stronie głównej gdy załaduje się zawartość. Takie podejście najlepiej sprawdza się w reklamach.

Reklamy są ważnym źródłem przychodu dla wielu witryn, ale użytkownicy szukają ich treści. Dzięki leniwemu ładowaniu reklam i szybszemu wyświetlaniu głównej treści możesz: zwiększają ogólny procent widoczności reklamy. Na przykład MediaVine włączyli reklamy leniwe ładowanie. i odnotowała 200% poprawę szybkości wczytywania stron. Google Ad Manager ma dokumentację o leniwym ładowaniu reklam.

Możesz też skonfigurować treści należące do innych firm tak, aby ładowały się tylko wtedy, gdy użytkownik przewinie stronę do w tej sekcji strony.

Obserwator skrzyżowań to interfejs API przeglądarki, który efektywnie wykrywa, kiedy element otwiera się lub opuszcza w obszarze roboczym przeglądarki i możesz użyć go do wdrożenia tej metody. lazysizes to popularna biblioteka JavaScriptu do leniwego ładowania obrazów i iframes. Obsługuje ona umieszczanie filmów YouTube widżety. Jest też opcjonalna. Intersection Observer.

Używanie atrybutu loading do leniwego ładowania obrazów i elementów iframe to doskonała alternatywa dla języka JavaScript. Ostatnio stała się dostępna w Chrome 76.

Optymalizacja sposobu obsługi skryptów zewnętrznych

Oto kilka zalecanych strategii optymalizacji wykorzystania z skryptów innych firm.

Hosting CDN firmy zewnętrznej

Często dostawcy zewnętrzni podają adresy URL plików JavaScript, które zwykle w sieci dystrybucji treści (CDN). Zaletą tego rozwiązania jest szybkie rozpoczęcie pracy – skopiować i wkleić adres URL bez konieczności wykonywania dodatkowych czynności związanych z konserwacją, dostawca zewnętrzny zajmuje się aktualizacjami konfiguracji serwera i skryptów.

Ponieważ jednak nie są one z tego samego źródła co reszta zasobów, wczytywanie plików z publicznej sieci 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 z serwerów innych firm, rzadko masz kontrolę nad tym, buforowanie. Korzystanie ze strategii buforowania innej osoby może spowodować, że skrypty zbyt często są pobierane z sieci zbyt często.

Samodzielne hostowanie skryptów innych firm

Samohostujące skrypty innych firm to opcja, która daje Ci większą kontrolę nad podczas ładowania skryptu. Dzięki hostingowi we własnym zakresie możesz:

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

Na przykład Casperowi udało się otrzymać 1, 7 sekundy. aby skrócić czas wczytywania, samodzielnie hostujący skrypt testów A/B.

Samohosting ma jednak jedną dużą wadę: skrypty mogą być nieaktualne i w przypadku zmiany interfejsu API lub poprawki zabezpieczeń nie będą otrzymywać automatycznych aktualizacji.

Używanie mechanizmów Service Worker do buforowania skryptów z serwerów innych firm

możesz używać skryptów service worker do buforowania skryptów z serwerów innych firm. jako alternatywy dla autohostingu. Daje to większą kontrolę nad buforowaniem, przy zachowaniu zalet zewnętrznych sieci CDN.

Możesz kontrolować częstotliwość ponownego pobierania skryptów z sieci oraz stworzyć strategię wczytywania, która ograniczy żądania mniej ważnych, zasobów firm zewnętrznych, dopóki użytkownik nie dojdzie do kluczowej interakcji na stronie. preconnect umożliwia nawiązanie wczesnych kontaktów i pomaganie i zmniejszyć koszty związane z siecią.