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
lubdefer
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ć.
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.
- 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.
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.