STATUS IS UPWIKI OPTYMALIZACJI WITRYN
25Przyspieszaj
Wydajność i dostarczanie / Przyspieszaj

Wydajność JavaScript: Zmniejsz pracę na głównym wątku

Zlokalizuj JavaScript, który powoduje przycięcia, opóźnienia lub zbędną pracę, i chroń interakcje użytkownika.

Wydajność JavaScript: Zmniejsz pracę na głównym wątku — PRZEWODNIK WIZUALNY
CZYTAJ
8 min
ŹRÓDŁA
5
ZWERYFIKUJ PONOWNIE
2027-03-27
przejrzano
Starszy recenzent wydajności web
KRÓTKA ODPOWIEDŹ

Zacznij od decyzji.

Zredukuj pracę na głównym wątku, mierząc rzeczywistą stronę i interakcję, a następnie naprawiając największy powtarzalny koszt. Główny wątek wykonuje większość JavaScriptu i prac interfejsu po jednym zadaniu naraz. Zadanie dłuższe niż 50 milisekund to długie zadanie, więc stuknięcie, kliknięcie, przewinięcie lub renderowanie może na nie czekać. Zacznij od checkoutu, wyszukiwania, nawigacji, formularzy i innych wrażliwych ścieżek.

Dla każdego kosztu usuń go, opóźnij do momentu potrzeby, podziel na krótkie partie albo przenieś ograniczone obliczenia do Web Workera. Zachowaj natychmiastową reakcję na głównym wątku, a odłóż analitykę i inne niewymagające natychmiastowego działania zadania. Traktuj każdy tag zewnętrzny jako zależność z przypisanym właścicielem. Testuj ponownie na ograniczonym CPU mobilnym i zachowaj procedury wycofania dla krytycznych przepływów.

PRZEWODNIK WIZUALNY

Zobacz pracę jako system.

Użyj tej mapy, aby połączyć decyzje z artykułu, zanim przejdziesz do poszczególnych taktyk.

SIUPrzyspieszaj
01Profiluj ścieżkę klienta zanim zmienisz kod
02Czytaj ślad jako kolejkę pracy
03Dostarczaj mniej kodu wtedy, kiedy to ma znaczenie
04Dzielenie pracy, aby przeglądarka mogła reagować
01

Profiluj ścieżkę klienta zanim zmienisz kod

Wybierz jedną ważną ścieżkę i interakcję, na przykład otwarcie nawigacji, filtrowanie wyników lub wysłanie formularza. Zarejestruj jej przebieg w panelu Performance Chrome DevTools, korzystając z czystego profilu przeglądarki. Powtórz działanie i wykonaj nagranie zarówno przy ograniczonej wydajności procesora, jak i na maszynie deweloperskiej; profil z komputera stacjonarnego może ukryć pracę uciążliwą na słabszym telefonie.

Użyj nagrania profilu do sprawdzenia wąskiej hipotezy, a nie do obwiniania komponentu na podstawie raportu pakietu JavaScript. Na wykresie płomieni Main szersze paski oznaczają dłuższy czas, a zagnieżdżone paski pokazują stos wywołań. Czerwony trójkąt przy elemencie „Task” wskazuje potencjalne długie zadanie; wybierz go i przejdź do łącza prowadzącego do kodu, który je zainicjował. Zachowuj nagrania sprzed i po istotnych zmianach.

Zarejestruj moment

Rozpocznij nagrywanie tuż przed akcją i zatrzymaj po widocznym wyniku.

Użyj powtarzalnego scenariusza

Utrzymuj spójną trasę, stan konta i sekwencję akcji.

Nadaj właściciela

Przypisz każdy główny koszt do zespołu lub dostawcy, który może go zmienić.

02

Czytaj ślad jako kolejkę pracy

Długie zadanie jest progiem wymagającym analizy, a nie pełną diagnozą. Specyfikacja W3C Long Tasks raportuje zadania trwające co najmniej 50 milisekund. Sprawdź, czy pod zadaniem występuje wykonywanie JavaScriptu, procedura obsługi zdarzenia, ponowne obliczanie stylów, obliczanie układu strony czy malowanie. Stos wywołań wskazuje miejsce, od którego warto zacząć, a czasy pokazują, czy problem dotyczy kodu, renderowania czy ramki pochodzącej od zewnętrznego dostawcy.

Priorytetyzuj koszty, które powtarzają się podczas wartościowej interakcji. Krótki handler może dalej wydawać się wolny, gdy wywołuje layout lub stoi w kolejce za wcześniejszą pracą. Ślad to pomiar laboratoryjny, więc potwierdź poprawkę na reprezentatywnych urządzeniach i, gdzie dostępne, za pomocą telemetrii polowej z uwzględnieniem prywatności.

Oddziel momenty

Parsowanie przy starcie potrzebuje innego rozwiązania niż handler po stuknięciu.

Zbadaj renderowanie

Znajdź powtarzające się wzorce zapisu stylu i odczytu layoutu przed refaktoryzacją.

Zachowaj punkt odniesienia

Do zadania dołącz ślad, scenariusz i najwyższe koszty.

03

Dostarczaj mniej kodu wtedy, kiedy to ma znaczenie

Sporządź inwentaryzację skryptów według trasy i celu. Usuń nieużywane pakiety, duplikaty, wycofane eksperymenty i kod dla zakończonych funkcji. Następnie rozdziel funkcje specyficzne dla trasy lub rzadko używane, aby ładowały się w razie potrzeby zamiast na ścieżce początkowej. Dynamiczne ładowanie może zmniejszyć pracę przy starcie, ale może też spowodować widoczne opóźnienie, gdy użytkownik od razu potrzebuje funkcji.

Zastanów się, czy komponent potrzebuje pełnego frameworka po stronie klienta, czy narzędzie nie powiela istniejącej funkcjonalności oraz czy wystarczy statyczny HTML z niewielkim ulepszeniem. Przetestuj stan zastępczy opóźnionego modułu. Strona powinna poprawnie odroczyć opcjonalną funkcję, zamiast wyświetlać nieaktywny element sterujący.

Ustal budżet trasy

Udokumentuj, jakie skrypty są dozwolone na trasie i dlaczego.

Ładuj na intencję

Rozważ to dla opcjonalnych edytorów, map, odtwarzaczy lub widoków raportowych.

Chroń ścieżki krytyczne

Testuj uwierzytelnianie, dostępność, płatności i wypełnianie formularzy; uzyskaj kwalifikowaną recenzję, jeśli kontrolki są zmieniane.

04

Dzielenie pracy, aby przeglądarka mogła reagować

Samo nadanie nazw mniejszym funkcjom nie tworzy odrębnych zadań przeglądarki, jeśli uruchamiają się synchronicznie. Podziel pracę w długiej pętli na partie, zaktualizuj od razu stan widoczny dla użytkownika, a przed kontynuacją zwróć sterowanie przeglądarce. Pozwoli to przeglądarce obsłużyć interakcje i renderowanie między partiami.

Gdy jest dostępne, scheduler.yield() pozwala zwrócić sterowanie głównemu wątkowi i później wznowić pracę; sprawdzaj dostępność tej funkcji i przygotuj rozwiązanie zastępcze dla nieobsługiwanych przeglądarek. Nie ustępuj po każdej drobnej operacji: powoduje to narzut i może wydłużyć całkowity czas wykonania. Wyznaczaj granice na podstawie pomiarów, zachowaj możliwość anulowania i nie dopuść, aby przestarzałe wyniki zastąpiły nowszy stan.

Postaw UI na pierwszym miejscu

Pokaż akceptację lub postęp przed niewidoczną pracą następczą.

Partiuj według upływu czasu

Odstępuj zanim zmierzona praca stanie się długa, zamiast robić to raz na element.

Unikaj przestarzałych skrótów

Aktualne wskazówki web.dev nie rekomendują nowej strategii opartej na isInputPending().

05

Przenieś obliczenia, nie interfejs, do workera

Web Worker uruchamia skrypt w tle na wątku oddzielonym od głównego wątku wykonawczego. Nadaje się do kosztownego parsowania, transformacji danych, indeksowania wyszukiwania i innych obliczeń, które nie wymagają bezpośredniego dostępu do interfejsu. Wyślij zdefiniowane wejście, zwróć zdefiniowany wynik i trzymaj renderowanie oraz widoczne zmiany stanu na głównym wątku.

Workery nie są uniwersalne. Nie mogą bezpośrednio manipulować DOM ani używać Window, a komunikacja między wątkami kopiuje dane. Tworzenie workera, przenoszenie danych i koordynacja błędów mogą przewyższyć korzyść z małego obliczenia. Mierz pełną interakcję, zakończ niepotrzebne workery i zaprojektuj fallback na wypadek awarii pracy w workerze.

Wybierz izolowaną pracę

Zacznij od obliczenia, którego wejście i wyjście da się zserializować i przetestować.

Wersjonuj komunikaty

Odrzuć wyniki utworzone dla starszego filtra, trasy lub akcji.

Zachowaj dostępność

Przekazuj sensowny postęp przez normalny interfejs.

06

Zarządzaj JavaScriptem stron trzecich jak zależnością produkcyjną

Analityka, reklamy, eksperymenty, embedy społecznościowe, odtwarzacze wideo i widgety wsparcia mogą dodawać żądania, ewaluację JavaScriptu, iframe'y i zależności. Skrypt dostawcy może być niezbędny, ale leży poza bezpośrednią kontrolą zespołu aplikacyjnego i może wpływać na wydajność, prywatność, bezpieczeństwo oraz ciągłość. Sporządź inwentaryzację celu, tras, warunków ładowania, zatwierdzającego, wymogu zgody i właściciela usunięcia.

Gdy pozwalają na to warunki i umowy, porównaj reprezentatywną stronę z jedną domeną zewnętrzną oraz bez niej. Narzędzia wydajnościowe mogą ujawnić kosztowne wykonywanie kodu, rozmiary przesyłanych danych i przypisanie długich zadań. Zachowaj lekką lub opóźnioną integrację tylko wtedy, gdy jej udokumentowana wartość uzasadnia zmierzony koszt. Potwierdź, że podstawowa treść i główna transakcja działają, gdy opcjonalna zależność jest powolna lub niedostępna.

Ogranicz zasięg awarii

Ładuj tag tylko na trasach i warunkach, które go potrzebują.

Przeglądaj kontrolę zmian

Uwzględnij zmiany w tag-managerze w przeglądach wydajności, prywatności, bezpieczeństwa i wycofania.

Zapewnij możliwość wyłączenia

Udokumentuj i przetestuj sposób wyłączenia integracji niekrytycznej.

07

Uczyń responsywność zabezpieczeniem przy wydaniach

Zamień zwycięski ślad w mały test regresji dla ważnej ścieżki. Zdefiniuj objęte interakcje, urządzenie lub ograniczenie CPU, oczekiwaną reakcję i recenzenta. Sparuj to z przeglądem bundla i inwentaryzacją stron trzecich, aby nowy pakiet lub tag nie wprowadził cicho pracy na głównym wątku.

Status Is UP wykorzystuje te dowody do proaktywnej optymalizacji i bezpiecznego usuwania problemów, a nie jako zamiennik monitorowania dostępności na żywo. Przed zmianą o wysokim ryzyku przygotuj plan wycofania i po wdrożeniu zweryfikuj krytyczny przepływ. Wyniki zależą od urządzenia, sieci, przeglądarki, treści i stanu konta; traktuj progi jako zabezpieczenia, a nie gwarancje.

Zablokuj znaczące zmiany

Wymagaj śladów przed i po dla współdzielonej nawigacji, checkoutu, wyszukiwania lub dużych bundli.

Ćwicz wycofanie

Znaj funkcję flagi, ustawienie taga lub wersję wdrożenia, która przywraca znane-dobre zachowanie.

Powtarzaj regularnie

Re-profiluj po dużych wydaniach, zmianach dostawców lub przesunięciach miksu urządzeń.

DZIAŁANIE / WERYFIKACJA

Twój praktyczny przewodnik z zadaniami.

  1. 01

    Wybierz krytyczną interakcję

    Nazwij trasę, akcję, oczekiwaną reakcję i wpływ na klienta.

    SPRAWDŹ: Notatka testowa zapisuje trasę, stan konta, akcję, przeglądarkę i ustawienie urządzenia lub CPU.
  2. 02

    Zarejestruj bazę

    Nagraj interakcję w DevTools Performance z czystego stanu.

    SPRAWDŹ: Zespół może ponownie przejrzeć ślad z Main flame chart.
  3. 03

    Znajdź blokującą pracę

    Sprawdź długie zadania, stosy wywołań, renderowanie i aktywność stron trzecich.

    SPRAWDŹ: Każdy główny koszt ma czas trwania, źródło lub origin, trasę i właściciela.
  4. 04

    Usuń zbędne skrypty

    Usuń nieużywane pakiety, wycofane eksperymenty, duplikaty i niepotrzebny kod trasy.

    SPRAWDŹ: Build i krytyczna ścieżka działają po usunięciu.
  5. 05

    Opóźnij funkcje opcjonalne

    Ładuj opcjonalną funkcjonalność później tylko wtedy, gdy jej opóźniony stan pozostaje użyteczny.

    SPRAWDŹ: Test świeżo załadowanej strony obejmuje ładowanie, błąd lub fallback.
  6. 06

    Podziel długie zadania

    Podziel pracę na partie i zwróć sterowanie przeglądarce po natychmiastowej reakcji interfejsu.

    SPRAWDŹ: Nowy ślad usuwa porównywalne długie zadanie na ścieżce interakcji i zachowuje poprawne wyniki.
  7. 07

    Oceń workera

    Przenieś tylko ograniczone obliczenia z definiowanymi komunikatami.

    SPRAWDŹ: Przetestuj czasy end-to-end, błędy, przestarzałe wyniki i sprzątanie.
  8. 08

    Audytuj strony trzecie

    Zapisz cel, właściciela, warunek, zgodę, koszt i procedurę wyłączenia.

    SPRAWDŹ: Każdy tag na trasie krytycznej ma decyzję: zachować, ograniczyć, opóźnić lub usunąć.
  9. 09

    Testuj warunki ograniczone

    Powtórz na CPU z ograniczeniem i reprezentatywnych przeglądarkach lub urządzeniach, jeśli to możliwe.

    SPRAWDŹ: Porównanie używa tego samego scenariusza i notuje materialne różnice.
  10. 10

    Wydaj z możliwością wycofania

    Dołącz ślad, kryterium akceptacji i instrukcję odwrócenia do wydania.

    SPRAWDŹ: Nazwany właściciel może przywrócić znane-dobre zachowanie bez nieudokumentowanego poszukiwania.
TEMATY DO DYSKUSJI

Porównuj kompromisy, nie dane prywatne.

Użyj tych pytań z zespołem lub społecznością właścicieli witryn. Dziel się metodami i lekcjami, ale nigdy nie wklejaj poświadczeń, danych klientów ani niepublicznych informacji infrastruktury.

  1. 01

    Która interakcja wyglądała akceptowalnie w raporcie ładowania, ale okazała się wolna, gdy profilowałeś rzeczywiste stuknięcie lub kliknięcie?

  2. 02

    Jak decydujecie, czy funkcja stron trzecich uzasadnia jej zmierzony koszt na głównym wątku?

  3. 03

    Który mechanizm wycofania ułatwia cofnięcie regresji wydajności bez zakłócania krytycznej ścieżki?

POPULARNE / AUTORYTATYWNE ZASOBY

Otwórz materiały źródłowe.

web.devOptimize long tasks ↗

Wyjaśnia długie zadania, zwracanie sterowania, scheduler.yield(), rozwiązania zastępcze i narzut związany ze zwracaniem sterowania.

Przejrzano 2026-09-27
Chrome for DevelopersAnalyze runtime performance ↗

Pokazuje nagrywanie, analizę wykresu płomieni, identyfikację długich zadań i badanie źródła.

Przejrzano 2026-09-27
MDN Web DocsWeb Workers API ↗

Definiuje workery, komunikację wiadomościami i ograniczenie bezpośredniego dostępu do DOM.

Przejrzano 2026-09-27
web.devLoad Third-Party JavaScript ↗

Daje wskazówki dotyczące audytu i pomiaru skryptów stron trzecich.

Przejrzano 2026-09-27
W3CLong Tasks API ↗

Definiuje długie zadania, próg i przypisanie kosztu.

Przejrzano 2026-09-27

Polityka źródeł. Artykuł opiera się na oficjalnej dokumentacji przeglądarek, standardach i dokumentacji web-platformy czytanej przez zespół redakcyjny. Rozróżnia pomiar i gwarancje oraz pomija niepotwierdzone twierdzenia.

SZYBKIE WYJAŚNIENIA

Często zadawane pytania.

Co kwalifikuje się jako długie zadanie JavaScript?

Specyfikacja W3C Long Tasks przyjmuje 50 milisekund lub więcej jako próg raportowania. To sygnał do zbadania, a nie dowód, że krótsze zadania są nieszkodliwe. Potwierdź przyczynę w zapisie śladu.

Czy code splitting zawsze poprawi wydajność JavaScript?

Nie. Dzielenie może zmniejszyć pracę przy starcie, ale dodać opóźnienie przy pierwszym użyciu. Stosuj je dla kodu specyficznego dla trasy lub opcjonalnego i testuj funkcję w warunkach ograniczonych.

Czy każda kosztowna funkcja powinna działać w Web Workerze?

Nie. Workery nadają się do izolowanych, intensywnych obliczeń CPU z definiowanymi komunikatami. Nie mogą bezpośrednio zmieniać DOM, transfer danych zajmuje czas, a małe zadania mogą skończyć szybciej na głównym wątku.

Status Is UP Editorial Team · Redakcja Uptime Enablement

Sprawdził(a): Starszy recenzent wydajności web. Opublikowano: 2026-09-27; zaktualizowano: 2026-09-30.