Ottimizzazione tecnica · Aprile 2026

Ottimizzazione JavaScript Shopify: come ridurre il tempo di esecuzione JS (2026)

Il negozio Shopify medio carica 400-800KB di JavaScript — e il browser deve analizzare, compilare ed eseguire ogni byte prima che la pagina diventi interattiva. Ecco come ridurre il tempo di esecuzione JS e migliorare i vostri Core Web Vitals.

~12 min di lettura · 2,600 parole · Pubblicato ad aprile 2026

Risolvete le prestazioni JS di Shopify in 60 secondi

Eseguite un test di velocità sul vostro negozio — se vedete "Riduci il tempo di esecuzione JavaScript" o "Riduci al minimo il lavoro sul thread principale" nella diagnostica, l'ottimizzazione JavaScript farà la differenza maggiore. Thunder Page Speed Optimizer risolve entrambi automaticamente:

  • Rinvia il JavaScript non critico fino a dopo il rendering della pagina
  • Riduce il Total Blocking Time (TBT) e migliora l'Interaction to Next Paint (INP)
  • Gestisce l'ordine di caricamento degli script delle app per prestazioni ottimali
  • Funziona con tutti i temi Shopify 2.0 — zero modifiche al codice del tema

Per gli sviluppatori che vogliono comprendere a fondo l'ottimizzazione JavaScript e applicare correzioni manuali, continuate a leggere.

Come il JavaScript compromette le prestazioni di un negozio Shopify

Il JavaScript influisce sulla velocità in modo diverso rispetto a CSS o immagini. Mentre il CSS blocca il rendering e le immagini influenzano il tempo di caricamento visivo, il JS blocca il thread principale — l'unico thread responsabile del layout, del paint e della risposta alle interazioni dell'utente. Quando il JavaScript è in esecuzione, non può succedere nient'altro. Toccare un pulsante, scorrere, digitare — tutto è bloccato finché l'esecuzione del JS non termina.

Tre metriche dei Core Web Vitals misurano direttamente l'impatto del JavaScript:

Metrica Cosa misura Impatto JS
Total Blocking Time (TBT)Tempo in cui il thread principale è bloccato durante il caricamento della paginaLe attività JS lunghe (>50ms) aumentano direttamente il TBT
Interaction to Next Paint (INP)Reattività agli input dell'utenteL'esecuzione pesante di JS ritarda la risposta a clic/tocchi
Time to Interactive (TTI)Il momento in cui la pagina diventa realmente interattivaLa pagina non è interattiva finché il JS non termina l'esecuzione

Su un dispositivo mobile di fascia media (quello che usa la maggior parte degli acquirenti), analizzare ed eseguire 500KB di JavaScript richiede 2-4 secondi. Durante quel tempo, il negozio sembra caricato ma non risponde alle interazioni — la peggior esperienza utente possibile. Per questo l'ottimizzazione JS ha spesso un impatto maggiore sulle conversioni rispetto all'ottimizzazione delle immagini. Scoprite di più nella nostra guida ai Core Web Vitals.

Da dove viene tutto questo JavaScript?

Capire da dove ha origine il JavaScript del vostro negozio è il primo passo per ridurlo. Ecco una ripartizione tipica:

Origine JS Dimensione tipica Caricato su
Core di Shopify (analytics, checkout)80-120KBOgni pagina
JavaScript del tema (Dawn, Prestige, ecc.)60-200KBOgni pagina
App installate (recensioni, upsell, chat)150-500KBOgni pagina (di solito)
Analytics (GA4, Meta Pixel, TikTok)50-150KBOgni pagina
Widget di terze parti (chat, popup)50-200KBOgni pagina

Notate lo schema: le app e gli script di terze parti rappresentano il 50-70% del JavaScript totale nella maggior parte dei negozi Shopify. Un negozio con 12 app può avere da solo oltre 400KB di JavaScript delle app — caricato su ogni pagina, anche su quelle dove quelle app non servono.

La nostra guida agli script di terze parti analizza l'impatto completo degli script esterni e come gestirli.

Come fare l'audit del JavaScript sul vostro negozio Shopify

Prima di ottimizzare, dovete sapere esattamente quali script si caricano e quanto tempo del thread principale consumano.

Metodo 1: Coverage di Chrome DevTools

  1. Aprite il vostro negozio in Chrome → DevTools (F12)
  2. Premete Ctrl+Shift+P (Mac: Cmd+Shift+P) → digitate "Coverage" → selezionate "Show Coverage"
  3. Fate clic sul pulsante di ricarica nel pannello Coverage
  4. Filtrate per "JS" — ordinate per byte totali e byte inutilizzati
  5. Risultato tipico: il 60-80% del JavaScript caricato risulta inutilizzato su una singola pagina

Metodo 2: Flame chart della scheda Performance

  1. DevTools → scheda Performance → selezionate "Screenshots" e "Web Vitals"
  2. Fate clic su registra → ricaricate la pagina → interrompete la registrazione
  3. Guardate la sezione Main — i blocchi gialli sono esecuzione JavaScript
  4. I blocchi gialli lunghi (>50ms) sono "long task" che bloccano il thread principale
  5. Fate clic su un blocco qualsiasi per vedere quale script e funzione ne sono responsabili

Metodo 3: scheda Network

  1. DevTools → scheda Network → filtrate per "JS"
  2. Ricaricate la pagina e ordinate per dimensione (dal più grande)
  3. Annotate il JS totale trasferito e il numero di richieste
  4. Controllate la colonna "Initiator" per vedere quali script ne hanno caricati altri

Per un quadro più ampio delle prestazioni, fate passare il vostro negozio dal nostro test di velocità — evidenzia i problemi specifici del JavaScript insieme ad altri colli di bottiglia delle prestazioni.

Rinvio degli script: async, defer e caricamento dinamico

Per impostazione predefinita, i tag <script> bloccano l'analisi dell'HTML. Il browser interrompe la costruzione della pagina, scarica lo script, lo esegue e poi continua. Gli attributi di rinvio degli script cambiano questo comportamento:

<!-- Render-blocking (default) — worst for performance -->

<script src="app.js"></script>



<!-- defer — downloads in parallel, executes after HTML parsing, maintains order -->

<script src="app.js" defer></script>



<!-- async — downloads in parallel, executes immediately when ready, no order guarantee -->

<script src="analytics.js" async></script>



<!-- Dynamic loading — loads on demand, best for non-essential scripts -->

<script>

  // Load chat widget only when user scrolls past fold

  const observer = new IntersectionObserver((entries) => {

    if (entries[0].isIntersecting) {

      const script = document.createElement("script");

      script.src = "https://chat-widget.example.com/widget.js";

      document.body.appendChild(script);

      observer.disconnect();

    }

  });

  observer.observe(document.querySelector("#footer"));

</script>

Quando usare ciascuno:

  • defer: JavaScript del tema, script delle app che dipendono dalla disponibilità del DOM
  • async: script di analytics (GA4, Meta Pixel) — indipendenti, nessuna dipendenza dal DOM
  • Caricamento dinamico: widget di chat, widget di recensioni, tutto ciò che è sotto la piega

Su Shopify, la sfida è che non controllate come le app iniettano i loro script. La maggior parte delle app aggiunge tag <script> senza async né defer. Questo è esattamente ciò che Thunder gestisce automaticamente — rinvia gli script non essenziali indipendentemente da come le app li hanno originariamente caricati.

Rimuovere il JavaScript inutilizzato da Shopify

Il JavaScript più veloce è quello che non caricate affatto. Ecco come ridurre il payload JS totale:

1. Fate l'audit e rimuovete le app non necessarie

Ogni app installata aggiunge JavaScript. Analizzate ogni app e chiedetevi: l'impatto di questa app sul fatturato giustifica il suo costo in termini di prestazioni? Candidate comuni alla rimozione:

  • App di badge di fiducia (sostituitele con HTML/CSS statico — risparmiate 30-80KB)
  • App per la barra degli annunci (usate quella integrata nel tema)
  • App SEO che aggiungono solo meta tag (fatelo manualmente nel codice del tema)
  • App installate per test e poi dimenticate

2. Ripulite il codice residuo delle app

Dopo aver disinstallato un'app, controllate i file del tema alla ricerca di riferimenti a script orfani:

  • Cercate nei file theme.liquid e layout/ i domini di script esterni
  • Controllate la cartella snippets/ per file .liquid specifici delle app
  • Cercate in assets/ i file JS appartenenti ad app rimosse

3. Sostituite le librerie pesanti

Alcuni temi e app caricano ancora jQuery (90KB) o altre librerie pesanti. Alternative moderne:

  • jQuery → document.querySelector e fetch nativi (0KB — integrati nei browser)
  • Slick slider (43KB) → CSS scroll-snap nativo o Swiper leggero (build minimale)
  • Moment.js (70KB) → Intl.DateTimeFormat nativo o day.js (2KB)

Il tema Dawn di Shopify è stato costruito appositamente per evitare dipendenze pesanti — usa JavaScript vanilla senza jQuery. Se il vostro tema dipende ancora da jQuery, è un forte segnale per considerare un aggiornamento del tema. Consultate anche la nostra guida sulle risorse che bloccano il rendering.

Caricamento basato sull'interazione: caricate il JS solo quando serve

Molti script Shopify non devono essere eseguiti al caricamento della pagina. Widget di chat, caroselli di recensioni e raccomandazioni di prodotto contano solo quando l'utente ci scorre sopra o interagisce con la pagina. Caricarli in anticipo spreca banda e blocca il thread principale senza motivo.

IntersectionObserver per il caricamento basato sullo scroll

Caricate gli script quando il loro elemento target entra nel viewport:

// Load review widget JS only when reviews section is visible

const reviewSection = document.querySelector("#product-reviews");

if (reviewSection) {

  const observer = new IntersectionObserver((entries) => {

    if (entries[0].isIntersecting) {

      // Load the review app script

      const script = document.createElement("script");

      script.src = "https://reviews-app.example.com/widget.js";

      document.body.appendChild(script);

      observer.disconnect();

    }

  }, { rootMargin: "200px" }); // Start loading 200px before visible

  observer.observe(reviewSection);

}

Trigger di interazione dell'utente

Alcuni script dovrebbero caricarsi solo quando l'utente interagisce attivamente:

// Load chat widget only on first user interaction

let chatLoaded = false;

function loadChat() {

  if (chatLoaded) return;

  chatLoaded = true;

  const script = document.createElement("script");

  script.src = "https://chat.example.com/widget.js";

  document.body.appendChild(script);

}



// Trigger on any user interaction

["mouseover", "touchstart", "scroll", "keydown"].forEach(event => {

  document.addEventListener(event, loadChat, { once: true });

});

Questo schema funziona bene per widget di chat, script di pop-up e widget di programmi fedeltà. L'utente ottiene un caricamento iniziale rapido e il widget appare entro 100-200ms dalla prima interazione — un ritardo impercettibile. Per il quadro completo sull'ottimizzazione dell'interattività, consultate la nostra guida all'ottimizzazione INP.

Code splitting e tree shaking per Shopify

Se state creando JavaScript personalizzato per il vostro tema Shopify (o lavorate con uno sviluppatore), le moderne tecniche di bundling possono ridurre significativamente ciò che viene inviato al browser:

Code splitting

Invece di raggruppare tutto il JavaScript in un unico file grande, suddividetelo in chunk più piccoli che si caricano su richiesta:

  • Suddivisione per route: il JS della pagina prodotto si carica solo sulle pagine prodotto, quello delle collezioni solo sulle pagine collezione
  • Suddivisione per componente: il JS della modale di anteprima rapida si carica solo quando l'utente clicca su "Quick View"
  • Suddivisione dei vendor: separate le librerie di terze parti in un proprio bundle memorizzabile nella cache

Tree shaking

Il tree shaking rimuove gli export inutilizzati dai moduli JavaScript. Se il vostro tema importa una libreria di utility ma usa solo 3 delle 50 funzioni, il tree shaking elimina le altre 47. Questo richiede la sintassi dei moduli ES (import/export) e un bundler come Vite, Webpack o esbuild.

Esempio di impatto: importare tutto lodash aggiunge 72KB. Importare solo lodash/debounce aggiunge 1KB. Si tratta di una riduzione del 98.6% da un singolo cambio di import.

La maggior parte dei merchant non implementerà direttamente code splitting o tree shaking — sono ottimizzazioni di livello sviluppatore. Ma se lavorate con uno sviluppatore su un tema personalizzato, insistete su queste pratiche. Possono ridurre il JavaScript del tema del 40-60%. Per un approfondimento su come il tema Dawn gestisce questo aspetto, consultate la nostra guida sulla velocità dei temi.

Web Worker: delegare i calcoli JavaScript pesanti

I Web Worker eseguono JavaScript in un thread separato in background, lasciando libero il thread principale per le interazioni dell'utente. Sono utili quando il vostro negozio esegue calcoli pesanti che altrimenti causerebbero scatti (jank):

  • Filtraggio complesso dei prodotti con centinaia di varianti
  • Calcoli dei prezzi su più valute o sconti per quantità
  • Elaborazione di grandi set di dati di prodotto per la funzionalità di ricerca
  • Elaborazione delle immagini per strumenti di personalizzazione (anteprime di incisione, ecc.)

Limite: i Web Worker non possono accedere al DOM. Possono solo inviare dati al thread principale tramite postMessage. Per la maggior parte dei negozi Shopify, i vantaggi maggiori derivano dal ridurre e rinviare il JavaScript piuttosto che spostarlo nei Worker. I Worker sono uno strumento di precisione per colli di bottiglia computazionali specifici.

Ottimizzazione JS: manuale vs Thunder

Ottimizzazione Approccio manuale Con Thunder
Rinvio degli script Modificare theme.liquid, aggiungere defer/async per ogni script Rinvio automatico degli script non critici
Gestione del JS delle app Nessun controllo su come le app iniettano il JS Rinvia automaticamente gli script delle app
Caricamento degli script di terze parti Costruire loader personalizzati basati sull'interazione Ordine di caricamento ottimizzato integrato
Manutenzione continua Ri-analizzare quando le app cambiano Si adatta automaticamente ai nuovi script
Rischio di rompere le funzionalità Alto — un ordine di rinvio errato può rompere le funzionalità Basso — testato sui principali temi

L'approccio migliore: combinate la pulizia manuale (rimozione delle app inutilizzate, pulizia del codice orfano) con l'ottimizzazione JS automatica di Thunder. Consultate i piani attuali.

Checklist di ottimizzazione JavaScript per Shopify

Ordinata per impatto — partite dall'alto:

  1. Installate Thunder Page Speed Optimizer — gestisce automaticamente il rinvio degli script e l'ottimizzazione del JS delle app. Installate ora
  2. Fate l'audit delle app installate — rimuovete le app che non usate attivamente. Ognuna aggiunge 30-150KB di JS.
  3. Ripulite il codice orfano delle app — cercate nei file del tema i riferimenti a script di app disinstallate.
  4. Eseguite Chrome Coverage — identificate il JS inutilizzato sui principali tipi di pagina.
  5. Verificate la dipendenza da jQuery — se il vostro tema carica jQuery, valutate l'aggiornamento a un tema moderno come Dawn.
  6. Implementate il caricamento basato sull'interazione — caricate chat, recensioni e widget sotto la piega allo scroll/interazione.
  7. Ottimizzate il CSS insieme al JS — entrambi bloccano il rendering; ottimizzateli insieme per il massimo impatto.
  8. Testate dopo le modifiche — eseguite il nostro test di velocità e verificate la funzionalità su tutti i tipi di pagina.

Domande frequenti sull'ottimizzazione JavaScript di Shopify

Quanto JavaScript carica in genere un negozio Shopify?

Un tema Shopify 2.0 standard come Dawn carica 150-250KB di JavaScript. Dopo aver installato app, aggiunto funzionalità personalizzate e integrato strumenti di terze parti (analytics, widget di chat, app di recensioni), la maggior parte dei negozi carica oltre 400-800KB di JS. Alcuni negozi molto personalizzati superano 1MB. Ogni app installata aggiunge in genere 30-150KB di JavaScript proprio, e questo JS spesso si carica su ogni pagina indipendentemente dal fatto che serva o meno.

Qual è la differenza tra async e defer per gli script Shopify?

Sia async sia defer rendono gli script non bloccanti per il rendering, ma si comportano in modo diverso. 'defer' scarica lo script in parallelo e lo esegue dopo che l'HTML è stato completamente analizzato, mantenendo l'ordine degli script. 'async' scarica in parallelo ma esegue immediatamente non appena è pronto, indipendentemente dall'analisi dell'HTML o dall'ordine degli script. Per Shopify, defer è di solito più sicuro perché molti script dipendono da altri script (come jQuery). Usate async solo per script indipendenti come gli analytics che non dipendono da nient'altro.

Rimuovere le app Shopify riduce il JavaScript?

Sì — ogni app Shopify inietta in genere 30-150KB di JavaScript nel vostro negozio. Rimuovere un'app ne rimuove il JS, ma non sempre completamente. Alcune app lasciano frammenti di codice nei file del tema anche dopo la disinstallazione. Dopo aver rimosso un'app, cercate nei file di layout e snippet del tema eventuali riferimenti residui al dominio o ai file script dell'app. Un negozio che passa da 15 a 8 app può ridurre il payload JS di 200-400KB.

Perché il mio negozio Shopify fallisce l'audit 'Riduci il tempo di esecuzione JavaScript'?

Questo audit di Lighthouse segnala quando il browser impiega più di 2 secondi ad analizzare, compilare ed eseguire il JavaScript. Cause comuni su Shopify: troppe app che caricano JS su ogni pagina, JavaScript del tema non ottimizzato con manipolazioni pesanti del DOM, widget di chat che si inizializzano immediatamente, script di analytics eseguiti in modo sincrono e widget di recensioni renderizzati al caricamento della pagina invece che allo scroll. La soluzione consiste nel ridurre il JS totale, rinviare gli script non critici e caricare i widget interattivi solo quando servono.

Posso usare i Web Worker su Shopify per migliorare le prestazioni JS?

Sì, ma con dei limiti. I Web Worker eseguono JavaScript in un thread in background, lasciando libero il thread principale per le interazioni dell'utente. Su Shopify potete delegare ai Web Worker calcoli pesanti come il calcolo dei prezzi, il filtraggio dell'inventario o l'elaborazione dei dati. Tuttavia, i Web Worker non possono accedere direttamente al DOM, quindi non sono adatti per attività di rendering dell'interfaccia. Per la maggior parte dei negozi Shopify, i vantaggi maggiori derivano dal ridurre il JS totale e rinviare gli script non critici piuttosto che implementare i Web Worker.

Come ottimizza Thunder il JavaScript sui negozi Shopify?

Thunder Page Speed Optimizer rinvia il JavaScript non critico così che si carichi dopo il rendering della pagina, riducendo il Total Blocking Time e migliorando il punteggio Interaction to Next Paint. Identifica quali script sono essenziali per il rendering above the fold e quali possono essere ritardati — inclusi script delle app, analytics, widget di chat e JavaScript del tema non necessario immediatamente. Questo avviene automaticamente senza modifiche al codice e funziona con tutti i temi Shopify 2.0.

Fate lavorare meglio il JavaScript del vostro negozio Shopify

Il JavaScript è il singolo maggiore collo di bottiglia delle prestazioni nella maggior parte dei negozi Shopify. Blocca l'interattività, gonfia i punteggi dei Core Web Vitals e influisce direttamente sul posizionamento SEO e sui tassi di conversione. La buona notizia: non serve riscrivere il codice del vostro negozio.

Iniziate con Thunder Page Speed Optimizer per il rinvio automatico degli script e la gestione del JS delle app. Poi fate manualmente l'audit delle app installate — rimuovere 3-4 app non necessarie può eliminare oltre 200KB di JavaScript da un giorno all'altro. Per il quadro completo dell'ottimizzazione, combinate l'ottimizzazione JS con l'ottimizzazione CSS, i miglioramenti TTFB e l'ottimizzazione dei template Liquid.

Testate ora il vostro negozio per vedere quanto il JavaScript sta influenzando le vostre prestazioni. Per una roadmap di ottimizzazione completa, consultate la nostra guida completa all'ottimizzazione della velocità di Shopify.

⚡

Ottimizzazione professionale della velocità per il suo negozio

Il nostro team si occupa di tutto: ottimizzazione del tema, pulizia delle app e garanzia Core Web Vitals. La maggior parte dei negozi viene ottimizzata in 2 settimane.

✅ Garanzia Core Web Vitals · ⚡ Consegna in 2 settimane · 🎁 6 mesi di Thunder gratis

A partire da 1.500 € · Scopri di più