Które skrypty blokują budowanie strony: sprawdzanie i granice analizy

Management Summary
Skrypty strony obsługują interakcje, analitykę i zgody, lecz niektóre mogą zatrzymywać przeglądarkę podczas budowania widoku. Zmiana momentu uruchomienia może przyspieszyć ładowanie, jeśli zachowane zostaną zależności między funkcjami. Historyczny przegląd dwudziestu odpowiedzi wskazuje możliwe źródła opóźnień, zamiast mierzyć rzeczywiste oczekiwanie odwiedzających. Liczą się więc szybkość i poprawność jednocześnie: przesunięcie skryptu może skrócić czekanie, ale też zakłócić zależną od czasu funkcję.
Spis treści
Pozycja skryptu w HTML pomaga szukać zależności. Nie mierzy jednak opóźnienia ani nie dowodzi obecności konkretnych elementów podczas wykonania. Historyczna próba dwudziestu odpowiedzi pokazuje wartość i granice analizy statycznej.

745 wykrytych znaczników, 660 klasyfikacji
Zapis z 6 września 2026, 14:26:11 +02:00 zawiera 745 wykrytych znaczników script, średnio 37,25 na odpowiedź. Szczegółową klasyfikację otrzymało tylko 660: 283 blokujące, 230 danych, 70 async, 52 defer i 25 module.
Różnica wynika z limitu analizatora: zachowuje najwyżej 120 rekordów skryptów na dokument. ZEIT dostarczył 205 wykrytych znaczników, więc 85 nie weszło do szczegółowych zliczeń. Zgłoszona ostatnia pozycja blokująca dotyczy tam tylko pierwszych 120 rekordów.
Odpowiedź nie zawsze jest stroną główną
Stack Overflow zwrócił status 429, a Allegro 403. Jeden i dwa wykryte znaczniki należą do tych dokumentów odpowiedzi, nie do potwierdzonych zwykłych stron głównych. Historyczna, wybrana próba nie jest aktualnym rankingiem wydajności.
Odpowiedź GitHuba zawierała osiem rekordów modułów i sześć danych, bez klasyfikacji blokującej. Nie dowodzi to nieprzerwanego parsowania, gotowego układu ani taniego JavaScriptu. Szesnaście odpowiedzi miało klasyfikację blokującą przed wykrytym końcem head. To ustalenie położenia, a nie pomiar opóźnienia pierwszego wyświetlenia.
Reguły ładowania mają warunki
Klasyczny zewnętrzny skrypt wstawiony przez parser bez async i defer zwykle wstrzymuje parsowanie na czas pobrania i wykonania. defer przesuwa wykonanie za koniec parsowania. async usuwa oczekiwanie na pobranie, lecz wykonanie nadal może zajmować główny wątek. Te atrybuty nie zmieniają czasu wykonania klasycznego skryptu osadzonego.
Moduły domyślnie wykonują się po parsowaniu, także moduły osadzone; async działa również dla modułów. Bloki danych, mapy importów i reguły spekulacji są odrębnymi przypadkami. nomodule, polityka bezpieczeństwa treści (CSP), błędy pobrania i sposób wstawienia mogą zatrzymać lub zmienić wykonanie. Pięć kategorii analizatora nie opisuje całej przeglądarki.
Pozycja bajtowa nie oznacza kompletności DOM
Trzynaście zapisanych pozycji zaokrągla się do 95–100 procent. Poniżej 50 procent leżą trzy, nie cztery; wynik Bund to 55 procent. Wynik ZEIT, 42 procent, podlega limitowi 120 rekordów. Dla Heise zapisano pozycję 6016 w 943 607 bajtach, pozostawiając 937 591 bajtów od otwierającego znacznika script.
Reszta obejmuje sam skrypt. Model dokumentu (DOM) to struktura elementów strony zbudowana przez przeglądarkę. Pozostała liczba bajtów nie pokazuje dokładnie, których elementów brakuje podczas wykonywania skryptu. Wcześniejszy kod może dodawać lub usuwać węzły, a parser przestawiać strukturę. Późniejsze funkcje zwrotne działają w innym czasie. Skaner spekulacyjny może też pobierać zasoby znajdujące się za zatrzymanym parserem głównym.
Koszt sieci wymaga zapisu przeglądarki
Siedem odpowiedzi ma klasyfikację blokującą z inną znormalizowaną nazwą hosta. Porównanie usuwa www i pomija schemat oraz port. Nie wykrywa więc każdego innego origin ani obcego właściciela. Trzy odpowiedzi nie mają żadnego wykrytego preconnect; pozostałych nie sprawdzono tym samym pod kątem zgodności docelowych hostów.
W zapisanym wyniku LukasWojcik stub.js znajduje się na 96 procentach, z 3082 bajtami od znacznika do końca. Nie zmierzono czasu oczekiwania. Cache, istniejące połączenia i pobieranie wyprzedzające mogą usunąć potrzebę nowego połączenia. Osadzenie stuba usuwa osobne pobranie pliku, lecz pozostawia wykonanie kodu i wymóg zgodności z CSP.
Co ustala analizator
Narzędzie bada do 3 MiB pobranego HTML bez wykonywania kodu. Jedenaście lokalnych prób ujawniło granice: tekst skryptu w komentarzach i szablonach jest liczony, nomodule trafia do kategorii blokującej, a osadzony moduł async do module. Pusty integrity jest uznawany za obecny.
Wskazanie document.write to dopasowanie tekstu w treści osadzonej, nie dowód wywołania. Zależnie od kontekstu API dodaje treść do strumienia parsera, jest ignorowane albo zastępuje dokument. Także Subresource Integrity (SRI) wymaga użytecznych danych integralności i odpowiedniego dostępu między originami; sama nazwa atrybutu nie wystarcza.
Pytania i odpowiedzi
Jak sprawdzić zmianę sposobu ładowania?
Zapis wydajności przeglądarki przed zmianą i po niej, przy porównywalnym cache oraz sieci, pokazuje czasy zasobów, pracę głównego wątku i renderowanie. Następnie potrzebne są testy zależnego kodu i obsługi zgody. Zliczenia statyczne wskazują miejsca do zbadania; zapis mierzy efekt.
Czy stub zgody może po prostu otrzymać defer lub async?
Stub zgody to mały skrypt zastępczy, który kolejkuje wywołania do czasu załadowania pełnego oprogramowania zgody. Zmiana kolejności ładowania wymaga sprawdzenia zależności. Kolejka musi istnieć przed kodem, który z niej korzysta; zmiana czasu wykonania może złamać ten warunek. Osadzona kopia wymaga też utrzymywanego procesu aktualizacji. preconnect i preload mogą skrócić oczekiwanie, ale nie gwarantują stałej oszczędności ani darmowego wykonania.


