Correzione rapida con Thunder
Su Shopify, il lavoro del thread principale raramente è un file pulito che puoi modificare. Di solito è il tuo tema più una serie di widget di recensione, popup, strumenti di analisi, abbonamenti, chat, upsell e script per la creazione di pagine. Thunder migliora l'ordine di caricamento e rinvia JavaScript non critico in modo che il browser possa eseguire il rendering dei contenuti e rispondere agli utenti prima.
Se PageSpeed segnala anche risorse che bloccano la visualizzazione, leggi il nostro Guida alle risorse per il blocco del rendering. Se la metrica del campo è rossa, utilizza il nostro Guida Shopify INP dopo aver applicato Thunder.
Installa ThunderCosa fa effettivamente il thread principale
Il thread principale del browser è l'unica corsia in cui avviene il lavoro più visibile sulla pagina. Analizza HTML, analizza CSS, calcola quali stili applicare, calcola il layout, dipinge i pixel, gestisce l'input ed esegue JavaScript. Quando JavaScript è in esecuzione, il browser non può rispondere contemporaneamente a un tocco, aggiornare il layout o disegnare un nuovo frame.
Lighthouse lo suddivide in categorie come valutazione dello script, analisi e compilazione dello script, stile e layout, rendering, analisi di HTML e CSS e raccolta dei rifiuti. I commercianti Shopify spesso vedono la valutazione degli script dominare il report perché gli script delle app vengono eseguiti su ogni pagina anche quando il cliente non apre mai il widget.
Ecco perché l'avvertimento conta oltre il punteggio di laboratorio. Un lavoro elevato sul thread principale aumenta il tempo di blocco totale e il tempo di blocco totale è un forte segnale di laboratorio per un vero dolore di interazione. La soglia INP di Google per una buona esperienza è inferiore a 200 ms; se il thread principale è occupato, il clic attende.
Perché i negozi Shopify attivano questo avviso
App JavaScript
Recensioni, chat, popup, analisi, programmi fedeltà, abbonamenti e pacchetti eseguono tutti il codice sullo stesso thread.
Funzionalità del tema
I cursori, la ricerca predittiva, la visualizzazione rapida, i selettori di varianti, le animazioni e i mega menu aggiungono gestori di eventi e lavoro di layout.
DOM grande
Migliaia di nodi rendono il calcolo dello stile e il layout più costosi. Vedi il nostro Guida alle taglie DOM.
Passaggio 1: trova le attività lunghe
Apri Chrome DevTools, vai su Prestazioni, registra il caricamento di una pagina e cerca attività lunghe gialle. Qualsiasi attività superiore a 50 ms blocca il thread principale abbastanza a lungo da essere conteggiata nel tempo di blocco totale.
// Quick field debugging in the browser console
new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
console.log('Long task:', Math.round(entry.duration), 'ms');
}
}).observe({ type: 'longtask', buffered: true }); If the worst tasks come from third-party domains, use our Guida agli script di terze parti. If they come from your own theme bundle, continue below.
Passaggio 2: rinviare gli script di temi non critici
Gli script in testa senza differimento bloccano l'analisi e competono presto per il thread principale. Per gli script dei temi che non devono essere eseguiti prima che venga visualizzato il contenuto, utilizzare defer:
<script src="{{ 'theme.js' | asset_url }}" defer></script> Fai attenzione alle dipendenze. Se un selettore di varianti dipende da una libreria globale caricata prima, preserva l'ordine. Non aggiungere ciecamente asincrono a tutto; async può eseguire file fuori ordine. Thunder gestisce il differimento in base alle dipendenze per gli script delle app, che di solito è dove risiede il guadagno maggiore.
Passaggio 3: carica i widget solo quando necessario
Chat, caroselli di recensioni, blocchi di consigli e incorporamenti di video spesso non necessitano di inizializzazione al caricamento della pagina. Caricali quando visibili o dopo l'interazione.
const widget = document.querySelector('[data-reviews-widget]');
const observer = new IntersectionObserver((entries) => {
if (!entries.some((entry) => entry.isIntersecting)) return;
import('./reviews-widget.js').then((module) => {
module.init(widget);
});
observer.disconnect();
}, { rootMargin: '300px' });
if (widget) observer.observe(widget); Questo modello mantiene JavaScript inutilizzato fuori dal percorso critico. Per immagini e incorporamenti, abbinalo al nostro Guida al caricamento lento di Shopify.
Passaggio 4: suddividere le attività JavaScript lunghe
Se il tuo tema scorre attraverso centinaia di nodi DOM, ricalcola i prezzi, aggiorna i filtri o visualizza i risultati della ricerca in un grande blocco, restituisci al browser tra i blocchi.
async function renderProducts(products) {
for (let i = 0; i < products.length; i += 12) {
renderProductBatch(products.slice(i, i + 12));
if ('scheduler' in window && 'yield' in scheduler) {
await scheduler.yield();
} else {
await new Promise((resolve) => setTimeout(resolve, 0));
}
}
} This does not reduce total work, but it prevents one long task from blocking input. That helps INP, especially on mobile where CPU throttling makes every millisecond of script work more expensive. For deeper JavaScript cleanup, use our Guida all'ottimizzazione JavaScript di Shopify.
Passaggio 5: evitare problemi di layout
Il thrashing del layout si verifica quando il codice legge ripetutamente i valori del layout e scrive le modifiche del DOM nello stesso ciclo. Ogni lettura può forzare il browser a ricalcolare il layout in modo sincrono.
// Bad: read and write in the same loop
cards.forEach((card) => {
const height = card.offsetHeight;
card.style.minHeight = height + 20 + 'px';
});
// Better: batch reads, then batch writes
const heights = cards.map((card) => card.offsetHeight);
cards.forEach((card, index) => {
card.style.minHeight = heights[index] + 20 + 'px';
}); Questo è importante per le pagine di raccolta, i cassetti ad aggiunta rapida, le intestazioni adesive e le gallerie multimediali dei prodotti. Se PageSpeed mostra sia il lavoro del thread principale che i costi elevati di stile/layout, ispeziona prima questi componenti interattivi.
Correzione manuale vs. Correzione Thunder
| Problema del thread principale | Correzione manuale | Correzione del tuono |
|---|---|---|
| Esecuzione dello script dell'app | Controlla ogni app e rinvia/rimuovi gli script | Rinvia automaticamente gli script delle app non critici |
| Tema JS con blocco del rendering | Aggiungi dipendenze di differimento e test | Ottimizza l'ordine di caricamento attorno ai contenuti critici |
| Attività personalizzate lunghe | Riscrivi JS in blocchi di lavoro e resa | Riduce il carico degli script concorrenti; il codice personalizzato necessita ancora di pulizia |
| Lavoro di stile/layout elevato | Riduci DOM e layout thrashing | Keeps scripts from piling onto the layout bottleneck |
Testa nuovamente le metriche giuste
Dopo le modifiche, ripetere prima il test mobile. Guarda il tempo di blocco totale in Lighthouse, l'INP nei dati sul campo e la suddivisione per categorie del thread principale. Non inseguire un punteggio perfetto in una corsa sintetica; confronta diverse esecuzioni e utilizza il dashboard Prestazioni Web di Shopify per le tendenze degli utenti reali.
Se anche il tuo LCP è alto, il prossimo collo di bottiglia potrebbe essere l'immagine del tuo eroe. Utilizza il nostro Guida al precaricamento dell'immagine Hero di Shopify e il più ampio Guida all'ottimizzazione della velocità di Shopify. Se anche PageSpeed segnala tempo di blocco totale Shopify elevato, catene di richieste critiche, o enormi carichi utili di rete, correggi la diagnostica nello stesso passaggio di audit. Per le opzioni di prezzo e automazione, vedere Prezzi tempestosi.
Riferimenti e validazione
Utilizzare Ripartizione del lavoro del thread principale di Lighthouse come fonte di verità per ciò che misura la diagnosi. Separa la valutazione degli script, l'analisi, lo stile e il layout, il rendering e altri lavori del browser in modo da poter capire se il problema è il codice del tema, lo stack dell'app o la quantità di DOM che il browser deve elaborare.
Per la reattività, effettuare un controllo incrociato con Guida INP di web.dev. Un negozio può sembrare visivamente carico pur sembrando rotto se il thread principale è occupato quando il cliente tocca una variante, apre il cassetto del carrello o fa clic sulla cassa. Questo è il motivo per cui Thunder si concentra così tanto sul differimento degli script di terze parti: dà al browser spazio per rispondere prima che il visitatore perda la pazienza.
Done For You
Core Web Vitals guarantee · 2-week delivery · 6 months Thunder free
Get Expert Optimization →Starting from €1,500
FAQ
Cos'è il lavoro del thread principale in PageSpeed Insights?
Il lavoro del thread principale è il tempo del browser impiegato nell'analisi di HTML e CSS, nel calcolo degli stili, nel layout della pagina, nel rendering dei pixel, nella compilazione di JavaScript e nell'esecuzione di JavaScript. Quando questo lavoro richiede troppo tempo, la pagina si carica lentamente e risponde tardi ai tocchi o ai clic.
Perché i negozi Shopify hanno un lavoro elevato sul thread principale?
The biggest cause is JavaScript from apps, analytics, chat widgets, reviews, popups, page builders, and theme features. Large DOM size, complex CSS, sliders, and quick-add product grids add more style and layout work.
Ridurre al minimo il lavoro del thread principale migliora l'INP?
Sì. INP misura la velocità con cui la pagina risponde alle interazioni. Se il thread principale è impegnato nell'esecuzione di JavaScript o nel ricalcolo del layout, il browser non può rispondere immediatamente, quindi INP peggiora.
Thunder può minimizzare automaticamente il lavoro del thread principale?
Thunder rinvia automaticamente gli script di app e temi non critici, riduce il comportamento di blocco del rendering e migliora l'ordine di caricamento. Ciò elimina gran parte della pressione del thread principale sui tipici negozi Shopify.
Cos'è un compito lungo?
Un'attività lunga è il lavoro JavaScript o del browser che occupa il thread principale per più di 50 millisecondi. Le attività lunghe bloccano l'input, ritardano le vernici e aumentano il tempo di blocco totale in Lighthouse.
Dovrei utilizzare async o differire sugli script Shopify?
Utilizza il differimento per gli script che dipendono dalla struttura della pagina o dall'ordine di esecuzione. Utilizza asincrono solo per script indipendenti come semplici beacon di analisi. Per gli script delle app che non controlli, un ottimizzatore in grado di riconoscere le dipendenze come Thunder è più sicuro della modifica cieca dei tag.