STATUS IS UPWIKI DI OTTIMIZZAZIONE DEL SITO
25Accelera
Prestazioni e distribuzione / Accelera

Prestazioni JavaScript: ridurre il lavoro sul thread principale

Individua il JavaScript che provoca esitazioni o ritardi nella pagina, elimina il lavoro non necessario e proteggi le interazioni.

Prestazioni JavaScript: ridurre il lavoro sul thread principale — GUIDA VISIVA
LEGGI
8 minuti
FONTI
5
RIVALIDA
2027-03-27
rivisto
Revisore senior delle prestazioni web
LA RISPOSTA BREVE

Inizia dalla decisione.

Riduci il lavoro sul thread principale misurando una pagina e un’interazione reali, quindi correggendo il costo ripetibile più grande. Il thread principale esegue la maggior parte del JavaScript e del lavoro dell’interfaccia della pagina un task alla volta. Un task più lungo di 50 millisecondi è un long task, quindi un tap, clic, scorrimento o paint può rimanere in coda dietro di esso. Parti da checkout, ricerca, navigazione, form e altri percorsi sensibili.

Per ogni costo, rimuovilo, posticipalo fino al momento del bisogno, dividilo in batch brevi o sposta in un Web Worker un calcolo ben delimitato. Mantieni la risposta immediata sul thread principale, ma rimanda analytics e altre attività successive non essenziali. Tratta ogni tag di terze parti come una dipendenza con un responsabile. Ripeti il test con una CPU mobile limitata e conserva un piano di rollback per i flussi critici.

GUIDA VISIVA

Vedi il lavoro come un sistema.

Usa questa mappa per collegare le decisioni dell'articolo prima di agire su singole tattiche.

SIUAccelera
01Profilare un percorso cliente prima di modificare il codice
02Leggi la traccia come una coda di lavoro
03Distribuire meno codice nel momento che conta
04Spezzare il lavoro in modo che il browser possa rispondere
01

Profilare un percorso cliente prima di modificare il codice

Scegli una rotta e un’interazione importanti, ad esempio aprire la navigazione, filtrare risultati o inviare un form. Registrala nel pannello Performance di Chrome DevTools in uno stato del browser pulito. Ripeti l'azione e acquisisci sia una registrazione con CPU limitata sia una su una macchina di sviluppo; le tracce desktop possono nascondere lavoro che disturba su un telefono meno potente.

Usa la traccia per verificare un’ipotesi ristretta, non per incolpare un componente da un report di bundle. Nel flame chart Main, le barre più larghe richiedono più tempo e quelle impilate mostrano lo stack di chiamate. Un triangolo rosso su un task identifica un possibile long task; selezionalo e segui il link al codice che lo ha avviato. Salva le tracce prima e dopo per cambiamenti significativi.

Cattura il momento

Registra poco prima dell’azione e interrompi dopo il risultato visibile.

Usa un caso ripetibile

Mantieni rotta, stato account e sequenza di azione coerenti.

Nomina un proprietario

Assegna ogni costo principale al team o fornitore in grado di cambiarlo.

02

Leggi la traccia come una coda di lavoro

Un long task è una soglia d’indagine, non una diagnosi completa. La specifica W3C Long Tasks segnala task della durata di 50 millisecondi o più. Cerca sotto un task la valutazione JavaScript, un handler di evento, ricalcolo degli stili, layout o paint. Lo stack di chiamate indica dove iniziare; i tempi mostrano se il problema è codice, rendering o un frame di terze parti.

Prioritizza i costi che si ripetono durante un’interazione di valore. Un handler breve può comunque sembrare lento quando innesca layout o è in attesa dietro lavoro precedente. La traccia è una misura di laboratorio, quindi conferma la correzione su dispositivi rappresentativi e, dove disponibile, con telemetria sul campo rispettosa della privacy.

Separare i momenti

Il parsing all'avvio richiede una soluzione diversa rispetto a un gestore eseguito dopo un tap.

Ispeziona il rendering

Individua pattern ripetuti di scrittura degli stili e lettura del layout prima del refactoring.

Mantieni una baseline

Allega la traccia, lo scenario e i costi principali all’attività di lavoro.

03

Distribuire meno codice nel momento che conta

Fai l’inventario degli script per rotta e scopo. Rimuovi pacchetti inutilizzati, duplicati, esperimenti ritirati e codice per funzionalità terminate. Poi separa le funzionalità specifiche della rotta o raramente usate affinché si carichino quando necessario anziché nel percorso iniziale. Il caricamento dinamico può ridurre il lavoro di avvio, ma può generare un ritardo visibile quando l’utente ha immediatamente bisogno della funzionalità.

Chiediti se un componente necessita di un intero framework client-side, se un’utility duplica funzionalità esistenti e se HTML statico con un piccolo enhancement può bastare. Testa lo stato di fallback di un modulo caricato in ritardo. La pagina dovrebbe gestire in modo affidabile una funzionalità opzionale rimandata, anziché mostrare un controllo inutilizzabile.

Crea un budget per rotta

Documenta quali script sono consentiti su una rotta e perché.

Carica su richiesta dell’utente

Consideralo per editor opzionali, mappe, player o viste di reportistica.

Proteggi i percorsi critici

Testa autenticazione, accessibilità, pagamento e completamento form; cerca revisione qualificata quando i controlli sono coinvolti.

04

Spezzare il lavoro in modo che il browser possa rispondere

Suddividere il lavoro in funzioni più piccole non crea task del browser separati se tali funzioni vengono eseguite in modo sincrono. Per un ciclo lungo, suddividi il lavoro in batch, aggiorna prima lo stato visibile all’utente, quindi cedi il controllo prima di continuare. In questo modo il browser può elaborare input e rendering tra un batch e l’altro.

Dove è supportato, scheduler.yield() restituisce il controllo al thread principale e poi riprende il lavoro; verifica che la funzionalità sia disponibile e usa un fallback per i browser non supportati. Non cedere dopo ogni singola piccola operazione: ha overhead e può aumentare il tempo di completamento. Scegli i confini basandoti sulle misurazioni, preserva la cancellazione e previeni che risultati obsoleti sovrascrivano stato più recente.

Metti l’interfaccia al primo posto

Mostra accettazione o progresso prima di follow-up non visibile.

Batch in base al tempo trascorso

Cedi prima che il lavoro misurato diventi lungo, anziché una volta per elemento.

Evita scorciatoie obsolete

Le linee guida correnti di web.dev non raccomandano una nuova strategia basata su isInputPending().

05

Sposta il calcolo, non l’interfaccia, in un worker

Un Web Worker esegue uno script su un thread in background separato dal thread principale di esecuzione. È adatto per parsing costosi, trasformazioni dati, indicizzazione di ricerca e altri calcoli che non necessitano di accesso diretto all’interfaccia. Invia un input definito, ritorna un risultato definito e mantieni rendering e modifiche di stato visibile sul thread principale.

I worker non sono universali. Non possono manipolare direttamente il DOM né usare Window, e la comunicazione tramite messaggi copia i dati. La creazione del worker, il trasferimento dei dati e il coordinamento degli errori possono superare i benefici per un calcolo di piccole dimensioni. Misura l’intera interazione, termina i worker non necessari e progetta un fallback se il lavoro del worker fallisce.

Scegli lavoro isolato

Inizia con un calcolo il cui input e output possono essere serializzati e testati.

Versiona i messaggi

Scarta i risultati generati per un filtro, una rotta o un'azione non più attuali.

Preserva l’accessibilità

Comunica progresso significativo attraverso l’interfaccia normale.

06

Governare il JavaScript di terze parti come una dipendenza di produzione

Analytics, advertising, esperimenti, embed sociali, player video e widget di supporto possono aggiungere richieste, valutazione JavaScript, iframe e dipendenze. Uno script vendor può essere necessario, ma è fuori dal controllo diretto del team applicativo e può influire su performance, privacy, sicurezza e continuità. Registra il suo scopo, le rotte, la condizione di caricamento, l'approvatore, il requisito di consenso e il responsabile della rimozione.

Quando condizioni e contratti lo permettono, compara una pagina rappresentativa con e senza una singola origine di terze parti. Gli strumenti di performance possono evidenziare valutazione costosa, payload e attribuzione di long-task. Mantieni un’integrazione leggera o posticipata solo quando il suo valore documentato giustifica il costo misurato. Verifica che i contenuti essenziali e la transazione principale funzionino quando una dipendenza opzionale è lenta o assente.

Limita il raggio d’impatto

Carica un tag solo su rotte e condizioni che ne hanno bisogno.

Revisiona il change control

Includi le modifiche al tag manager nella revisione della gestione delle modifiche, delle prestazioni, della privacy, della sicurezza e del rollback.

Tieni uno switch di rimozione

Documenta e testa come disabilitare un’integrazione non critica.

07

Rendi la reattività una salvaguardia del rilascio

Trasforma la traccia vincente in un piccolo controllo di regressione per il percorso importante. Definisci le interazioni coperte, il vincolo di dispositivo o CPU, la risposta attesa e il revisore. Abbinalo all’inventario dei bundle e delle terze parti affinché un nuovo pacchetto o tag non possa reintrodurre silenziosamente lavoro sul thread principale.

Status Is UP usa questa evidenza per ottimizzazione proattiva e rimedio sicuro, non per sostituire il monitoraggio della disponibilità in produzione. Prima di una modifica ad alto rischio, prepara il rollback e verifica il percorso critico dopo il rilascio. I risultati variano per dispositivo, rete, browser, contenuto e stato account; tratta le soglie come guardrail, non garanzie.

Blocca cambiamenti significativi

Richiedi tracce prima e dopo per navigazione condivisa, checkout, ricerca o grandi bundle.

Esercita il rollback

Conosci il feature flag, l’impostazione del tag o la versione di deployment che ripristina il comportamento noto-buono.

Rivedi regolarmente

Ripeti la profilazione dopo rilasci importanti, cambiamenti di fornitore o variazioni nella composizione dei dispositivi.

AZIONE / VERIFICA

La tua guida pratica alle attività.

  1. 01

    Seleziona un’interazione critica

    Nomina la rotta, l’azione, la risposta attesa e l’impatto sul cliente.

    VERIFICA: Una nota di test registra rotta, stato account, azione, browser e impostazione di dispositivo o CPU.
  2. 02

    Registra una baseline

    Registra l’interazione in DevTools Performance da uno stato pulito.

    VERIFICA: Il team può riesaminare una traccia con il Main flame chart.
  3. 03

    Trova lavoro bloccante

    Ispeziona long task, stack di chiamate, rendering e attività di terze parti.

    VERIFICA: Ogni costo principale ha una durata, fonte o origine, rotta e proprietario.
  4. 04

    Rimuovi script non necessari

    Elimina pacchetti inutilizzati, esperimenti ritirati, duplicati e codice di rotta non necessario.

    VERIFICA: La build e il percorso critico funzionano dopo la rimozione.
  5. 05

    Ritarda funzionalità opzionali

    Carica le funzionalità opzionali più tardi solo se restano utilizzabili anche mentre il caricamento è ritardato.

    VERIFICA: Un test su pagina fresca copre caricamento, errore o fallback.
  6. 06

    Dividi i long task

    Batchizza il lavoro e cedi dopo la risposta immediata dell’interfaccia.

    VERIFICA: Una nuova traccia rimuove il long task comparabile nel percorso di interazione e preserva risultati corretti.
  7. 07

    Valuta un worker

    Sposta solo calcolo con confini definiti e messaggi chiari.

    VERIFICA: Test end-to-end di tempi, errori, risultati obsoleti e cleanup.
  8. 08

    Audita le terze parti

    Registra scopo, proprietario, condizione, consenso, costo e procedura di disabilitazione.

    VERIFICA: Ogni tag di rotta critica ha una decisione: mantieni, limita, ritarda o rimuovi.
  9. 09

    Testa condizioni limitate

    Ripeti il test con CPU limitata e, dove possibile, su browser o dispositivi rappresentativi.

    VERIFICA: Il confronto usa lo stesso scenario e annota differenze materiali.
  10. 10

    Rilascia con rollback

    Allega al rilascio la traccia, il controllo di accettazione e le istruzioni di rollback.

    VERIFICA: Un proprietario nominato può ripristinare il comportamento noto-buono senza una ricerca non documentata.
ARGOMENTI DI DISCUSSIONE

Confronta i compromessi, non i dati privati.

Usa questi spunti con il tuo team o la community dei proprietari di siti. Condividi metodi e lezioni, ma non incollare mai credenziali, dati dei clienti o dettagli infrastrutturali non pubblici.

  1. 01

    Quale interazione è sembrata accettabile in un report di caricamento ma si è rivelata lenta quando hai profilato un vero tap o clic?

  2. 02

    Come decidi se una funzionalità di terze parti giustifica il suo costo misurato sul thread principale?

  3. 03

    Quale meccanismo di rollback rende più semplice invertire una regressione di performance senza interrompere un percorso critico?

RISORSE POPOLARI / AUTOREVOLI

Apri il materiale di riferimento.

web.devOptimize long tasks ↗

Spiega long task, yielding, scheduler.yield(), fallback e overhead del yield.

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

Mostra registrazione, analisi del flame chart, identificazione dei long task e indagine della sorgente.

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

Definisce worker, comunicazione via messaggi e il limite della manipolazione diretta del DOM.

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

Fornisce indicazioni per audit e misurazione degli script di terze parti.

Rivisto 2026-09-27
W3CLong Tasks API ↗

Definisce long task, la soglia e l’attribuzione.

Rivisto 2026-09-27

Politica delle fonti. Questo articolo utilizza documentazione ufficiale del browser, standard e web-platform letta dal team editoriale. Distingue la misurazione dalle garanzie e omette affermazioni non supportate.

Chiarimenti rapidi

Domande comuni.

Cosa si intende per long JavaScript task?

La specifica W3C Long Tasks usa 50 millisecondi o più come soglia di segnalazione. È un indicatore per indagare, non la prova che i task più brevi siano innocui. Conferma la causa in una traccia.

Lo code splitting migliorerà sempre le prestazioni JavaScript?

No. Lo splitting può ridurre il lavoro di avvio ma aggiungere ritardo al primo utilizzo. Usalo per codice specifico di rotta o opzionale, quindi testa la funzionalità in condizioni limitate.

Ogni funzione costosa dovrebbe essere eseguita in un Web Worker?

No. I worker sono adatti per calcolo isolato e intensivo con messaggi definiti. Non possono modificare direttamente il DOM, il trasferimento dati richiede tempo e i task piccoli possono completarsi più velocemente sul thread principale.

Status Is UP Editorial Team · Redattori Uptime Enablement

Revisionato da Revisore senior delle prestazioni web. Pubblicato 2026-09-27; aggiornato 2026-09-30.