Due livelli di velocità: liquido (server) + front-end (browser)
La velocità del negozio Shopify ha due livelli distinti. Ottimizzazione dei liquidi accelera la generazione di HTML lato server, riducendo il TTFB. Ottimizzazione front-end accelera ciò che fa il browser con quell'HTML, riducendo LCP, TBT e INP.
Thunder Page Speed Optimizer gestisce il livello front-end: deferring JavaScript con blocco del rendering, ottimizzando Consegna CSSe gestione dell'ordine di caricamento delle risorse. Questo articolo tratta il livello lato server: consente ai tuoi modelli Liquid di generare HTML più velocemente.
Esegui uno speed test sul tuo negozio per vedere entrambi gli strati in azione. Se il TTFB è superiore a 800 ms, l'ottimizzazione di Liquid dovrebbe essere la tua prima priorità. Se TTFB è già veloce ma LCP/TBT sono lenti, correzione delle risorse che bloccano il rendering con Thunder avrà l'impatto maggiore.
Come funziona la pipeline di rendering liquido di Shopify
Comprendere la pipeline di rendering ti aiuta a sapere dove gli sforzi di ottimizzazione fanno la differenza:
- La richiesta arriva — Shopify riceve la richiesta HTTP del browser
- Corrispondenza percorso — Shopify determina quale modello visualizzare (prodotto, collezione, pagina, ecc.)
- Recupero dati — Shopify loads product data, collection data, settings, and metafields from the database
- Lavorazione liquidi — Il motore del modello elabora tutti i tag, i loop, i condizionali e i filtri Liquid
- Rendering della sezione — Ogni sezione del modello viene elaborata in modo indipendente
- Assemblaggio HTML — Le sezioni elaborate vengono combinate nel documento HTML finale
- Risposta inviata — L'HTML completo viene inviato al browser (questo è il momento in cui viene misurato il TTFB)
Steps 3-6 are where Liquid code quality matters most. Complex templates with excessive loops, heavy data access, and deep snippet nesting extend these steps from 50ms to 500ms+.
L'intuizione chiave: ogni tag Liquid viene eseguito a ogni caricamento della pagina. Unlike front-end JavaScript that can be cached, deferred, or lazy-loaded, Liquid re-executes from scratch on every request. This makes server-side optimization compound — a 100ms Liquid improvement means 100ms saved on every single page view. Learn more about how TTFB fits into the bigger picture in our Guida all'ottimizzazione del TTFB.
Profilazione delle prestazioni liquide con l'ispettore dei temi
Il Ispettore temi Shopify L'estensione Chrome è lo strumento migliore per identificare il codice Liquid lento. Ecco come utilizzarlo in modo efficace:
Impostazione
- Install "Shopify Theme Inspector for Chrome" from the Chrome Web Store
- Accedi al tuo pannello di controllo Shopify nello stesso browser
- Passa al tuo negozio (non all'amministratore, l'URL effettivo del negozio)
- Fai clic sull'icona dell'estensione Theme Inspector → aggiunge
?pb=1all'URL - Il grafico della fiamma del profiler appare in fondo alla pagina
Cosa cercare
- Blocchi larghi nel grafico della fiamma : rappresentano file Liquid o blocchi di codice che richiedono più tempo per il rendering
- Tratti >50ms : qualsiasi sezione che richiede più di 50 ms è un candidato all'ottimizzazione
- Chiamate di rendering dello snippet : rendering di snippet ad alta frequenza che si ripetono decine di volte
- Tempo totale di rendering del liquido : mostrato nella parte superiore del profiler. Meno di 200 ms va bene; oltre 500 ms necessitano di lavoro
Profilo di più tipi di pagina: home page, pagine di prodotto, pagine di collezione. Ciascuno avrà colli di bottiglia diversi. Le pagine di raccolta in genere hanno il tempo di rendering Liquid più elevato a causa dei loop di prodotto: consulta la nostra guida rapida alla pagina di raccolta per suggerimenti specifici della pagina.
Insidie comuni delle prestazioni dei liquidi (e come risolverle)
1. Loop nidificati (il killer numero 1 delle prestazioni)
Un ciclo all'interno di un ciclo moltiplica le iterazioni in modo esponenziale. Questo è il problema di prestazioni di Liquid più comune e di maggiore impatto:
{% comment %} ❌ BAD: 50 products × 10 variants = 500 iterations {% endcomment %}
{'{% for product in collection.products %}'}{'
'}
{' {% for variant in product.variants %}'}{'
'}
{' {% if variant.available %}'}{'
'}
{' '}{'
'}
{' {% endif %}'}{'
'}
{' {% endfor %}'}{'
'}
{'{% endfor %}'}{'
'}
{'
'}
{'{% comment %} ✅ BETTER: Limit products, handle variants client-side {% endcomment %}'}{'
'}
{'{% for product in collection.products limit: 12 %}'}{'
'}
{' '}{'
'}
{' {{ product.title }}'}{'
'}
{' '}{'
'}
{'{% endfor %}'}} Correzione: Limita le iterazioni del ciclo esterno, sposta l'elaborazione interna su JavaScript ove possibile o appiattisci la struttura dei dati utilizzando json
Filtro ed elaborazione sul front-end.
2. Accesso eccessivo agli oggetti
Ogni volta che accedi alla proprietà di un oggetto Liquid, Shopify esegue una ricerca. L'accesso ripetuto alla stessa proprietà fa perdere tempo di elaborazione:
{% comment %} ❌ BAD: Accessing product.title 6 times {% endcomment %}
{'{{ product.title }}
'}{'
'}
{''}{'
'}
{'{{ product.title }} | {{ shop.name }} '}{'
'}
{''}{'
'}
{'<script>dataLayer.push({'name': '{{ product.title }}'})</script>'}{'
'}
{'
'}
{'{% comment %} ✅ BETTER: Assign once, reference the variable {% endcomment %}'}{'
'}
{'{% assign product_title = product.title %}'}{'
'}
{'{{ product_title }}
'}{'
'}
{''}{'
'}
{'{{ product_title }} | {{ shop.name }} '}{'
'}
{''}{'
'}
{'<script>dataLayer.push({'name': '{{ product_title }}'})</script>'}} Regola pratica: Se accedi alla stessa proprietà dell'oggetto più di 3 volte, assegnala prima a una variabile. Ciò ha un impatto particolarmente elevato all’interno dei circuiti in cui i risparmi si moltiplicano.
3. Query di raccolta illimitate
Il caricamento di un'intera collezione quando ti servono solo pochi prodotti costringe Shopify a recuperare ed elaborare i dati non necessari:
{% comment %} ❌ BAD: Loads all products in the collection {% endcomment %}
{'{% for product in collections["best-sellers"].products %}'}{'
'}
{' {{ product.title }}'}{'
'}
{'{% endfor %}'}{'
'}
{'
'}
{'{% comment %} ✅ BETTER: Limit to what you actually display {% endcomment %}'}{'
'}
{'{% for product in collections["best-sellers"].products limit: 8 %}'}{'
'}
{' {{ product.title }}'}{'
'}
{'{% endfor %}'}} Impatto: Una raccolta con 500 prodotti richiede molto più tempo per l'iterazione rispetto a una limitata a 8. Utilizzare sempre
Limite : quando sai di quanti articoli hai bisogno.
4. Snippet profondamente annidati Rendering
Ciascuno La chiamata ha un sovraccarico. Una sezione che esegue il rendering di uno snippet, che esegue il rendering di un altro snippet, che esegue il rendering di un altro snippet ancora, crea una catena di sovraccarico di elaborazione:
{% comment %} ❌ BAD: 3 levels of nesting for each product card {% endcomment %}
{'{% comment %} section → product-card snippet → price snippet → badge snippet {% endcomment %}'}{'
'}
{'{% render "product-card", product: product %}'}{'
'}
{' {% comment %} Inside product-card.liquid: {% endcomment %}'}{'
'}
{' {% render "price-display", variant: product.selected_or_first_available_variant %}'}{'
'}
{' {% comment %} Inside price-display.liquid: {% endcomment %}'}{'
'}
{' {% render "sale-badge", compare_price: variant.compare_at_price %}'}{'
'}
{'
'}
{'{% comment %} ✅ BETTER: Flatten into fewer, larger snippets {% endcomment %}'}{'
'}
{'{% render "product-card", product: product %}'}{'
'}
{'{% comment %} product-card.liquid handles price and badge inline {% endcomment %}'}} Migliore pratica: Mantieni l'annidamento degli snippet a un massimo di 2 livelli. Se trovi più di 3 livelli di annidamento, appiattisci gli snippet interni nel loro genitore.
5. Filtri per liquidi pesanti su set di dati di grandi dimensioni
Filtri liquidi come dove
Mappa, e ordinamento scorre le raccolte lato server. Il concatenamento di più filtri su set di dati di grandi dimensioni complica l'elaborazione:
{% comment %} ❌ SLOW: Three filter passes on a large collection {% endcomment %}
{'{% assign available = collection.products | where: "available", true %}'}{'
'}
{'{% assign tagged = available | where: "tags", "featured" %}'}{'
'}
{'{% assign sorted = tagged | sort: "price" %}'}{'
'}
{'
'}
{'{% comment %} ✅ FASTER: Use a single limited loop with conditionals {% endcomment %}'}{'
'}
{'{% for product in collection.products limit: 50 %}'}{'
'}
{' {% if product.available and product.tags contains "featured" %}'}{'
'}
{' {% comment %} Render product {% endcomment %}'}{'
'}
{' {% endif %}'}{'
'}
{'{% endfor %}'}} Migliori pratiche per le prestazioni dei liquidi
Oltre a risolvere insidie specifiche, queste pratiche mantengono veloci i modelli Liquid man mano che il tuo negozio cresce:
Utilizza l'impaginazione per raccolte di grandi dimensioni
Racchiudi sempre i cicli di raccolta nei tag impaginati. Senza impaginazione, Shopify tenta di elaborare tutti i prodotti contemporaneamente:
{% paginate collection.products by 24 %}
{' {% for product in collection.products %}'}{'
'}
{' {% comment %} Render product card {% endcomment %}'}{'
'}
{' {% endfor %}'}{'
'}
{' {{ paginate | default_pagination }}'}{'
'}
{'{% endpaginate %}'}} Sfrutta l'API di rendering della sezione
Shopify API di rendering della sezione ti consente di aggiornare singole sezioni tramite AJAX senza ricaricare l'intera pagina. Usalo per:
- Aggiornamenti del cassetto del carrello (rieseguire il rendering solo della sezione del carrello)
- Modifiche alle varianti del prodotto (rieseguire il rendering delle informazioni sul prodotto senza ricaricare l'intera pagina)
- Filtraggio raccolta (aggiorna solo la sezione griglia prodotto)
- Aggiunta rapida al carrello (riesegui il rendering del conteggio del carrello senza navigazione)
Ciò riduce il carico del server perché viene elaborata solo una sezione anziché l'intero modello di pagina.
Caricamento sezione condizionale
Non tutte le sezioni devono essere visualizzate per ogni visitatore. Utilizza i condizionali liquidi per saltare le sezioni pesanti quando non sono rilevanti:
{% comment %} Only render recently viewed if there are items to show {% endcomment %}
{'{% if section.settings.show_recently_viewed %}'}{'
'}
{' {% comment %} Render recently viewed section {% endcomment %}'}{'
'}
{'{% endif %}'}{'
'}
{'
'}
{'{% comment %} Skip heavy related products section on mobile if configured {% endcomment %}'}{'
'}
{'{% unless section.settings.hide_on_mobile and request.user_agent contains "Mobile" %}'}{'
'}
{' {% comment %} Render related products {% endcomment %}'}{'
'}
{'{% endunless %}'}} Riduci al minimo l'accesso al metafield
Le ricerche nei metafield richiedono query al database. Se utilizzi ampiamente i metafield, raggruppa i tuoi accessi:
{% comment %} ❌ BAD: Multiple metafield accesses scattered through template {% endcomment %}
{'{{ product.metafields.custom.material }}
'}{'
'}
{''}{'
'}
{'{{ product.metafields.custom.material }}'}{'
'}
{'
'}
{'{% comment %} ✅ BETTER: Assign once at the top {% endcomment %}'}{'
'}
{'{% assign material = product.metafields.custom.material %}'}{'
'}
{'{% assign care_instructions = product.metafields.custom.care %}'}{'
'}
{'{% assign origin = product.metafields.custom.origin %}'}} Ottimizzazione lato server (liquido) vs front-end
| Aspetto | Ottimizzazione dei liquidi | Front-end (Thunder) |
|---|---|---|
| Cosa influenza | TTFB (tempo di risposta del server) | LCP, TBT, INP, CLS |
| Dove corre | I server di Shopify | Browser del visitatore |
| Impatto tipico | Riduzione del TTFB di 50-300 ms | Miglioramento del rendering di 1-3 secondi |
| Attuazione | Modifiche al codice del tema (lavoro dello sviluppatore) | Automatico (installa e configura) |
| Manutenzione | Manuale: ricontrolla quando il tema cambia | Automatico: si adatta ai cambiamenti |
Per la massima velocità: ottimizza i modelli Liquid per un TTFB più veloce, quindi utilizza Thunder per l'ottimizzazione della consegna front-end. Vedi il nostro servizio di ottimizzazione per un aiuto pratico.
Elenco di controllo per l'ottimizzazione di Shopify Liquid
Esaminali in ordine: prima il profilo, quindi risolvi i problemi più grandi:
- Installa l'ispettore temi Shopify — Profila la tua home page, la pagina del prodotto e la pagina della collezione. Nota il tempo di rendering totale e le sezioni lente.
- Correggi i loop nidificati — Trova eventuali modelli loop-in-a-loop e appiattiscili o aggiungi limiti.
- Aggiungi
:a tutti i circuiti di raccolta — Non ripetere mai un'intera raccolta senza un limite esplicito. - Utilizzare
assegnareper valori ripetuti — Qualsiasi proprietà a cui si accede più di 3 volte deve essere assegnata a una variabile. - Appiattisci l'annidamento degli snippet — Continua a nidificare su 2 livelli massimo. Snippet in linea profondamente annidati.
- Aggiungi impaginazione : tutti i modelli di raccolta dovrebbero essere utilizzati
impaginare. - Installa Thunder per l'ottimizzazione del front-end — Completa i tuoi miglioramenti di Liquid con l'ottimizzazione automatica JS/CSS. Installa ora o vedere Ripartizione completa delle funzionalità
- Riprofilatura dopo le modifiche – Esegui nuovamente Theme Inspector e confronta il tempo di rendering totale. Obiettivo per meno di 200 ms.
Domande frequenti sull'ottimizzazione di Shopify Liquid
In che modo il rendering Liquid influisce sulla velocità del negozio Shopify?
Liquid è il linguaggio di template lato server di Shopify: viene eseguito sui server di Shopify prima che l'HTML venga inviato al browser. Il codice Liquid complesso aumenta direttamente il Time to First Byte (TTFB) perché il server impiega più tempo per generare la risposta HTML. I comuni killer delle prestazioni includono cicli for nidificati, accesso eccessivo agli oggetti (chiamando product.title 20 volte invece di assegnarlo una volta), snippet profondamente nidificati e caricamento di oggetti di raccolte complete quando sono necessari solo pochi prodotti. L'ottimizzazione di Liquid riduce il tempo di elaborazione del server di 50-300 ms.
Cos'è Shopify Theme Inspector e come lo utilizzo?
The Shopify Theme Inspector is a Chrome extension that profiles Liquid rendering time. Install it from the Chrome Web Store, open your store while logged into your Shopify admin, and click the extension icon. It shows a flame chart of which Liquid files and code blocks take the most time to render. Look for snippets or sections that take more than 50ms — those are your optimization targets. The profiler works on development stores and stores with the password page disabled.
Dovrei utilizzare snippet o sezioni per i componenti Liquid?
Per quanto riguarda le prestazioni, le sezioni sono generalmente migliori degli snippet profondamente annidati. L'API di rendering delle sezioni di Shopify 2.0 consente di eseguire nuovamente il rendering delle singole sezioni senza ricaricare l'intera pagina. Gli snippet vanno bene per pezzi piccoli e riutilizzabili (icone, componenti semplici), ma evita di annidare gli snippet a più di 2 livelli di profondità. Ogni chiamata di rendering dello snippet comporta un sovraccarico: una pagina che visualizza più di 30 snippet sarà significativamente più lenta di una che utilizza meno sezioni più grandi. L'eccezione: gli snippet con rendering condizionale (renderizzati solo quando necessario) possono essere più efficienti delle sezioni che si caricano sempre.
Come posso ridurre i loop di liquidi che rallentano il mio negozio Shopify?
The biggest Liquid loop performance issues come from nested loops and unbounded iteration. First, always use the 'limit' parameter: instead of looping through all 500 products in a collection, use 'for product in collection.products limit:12'. Second, avoid nested loops — a loop of 50 products with an inner loop of 10 variants creates 500 iterations. Third, move filtering logic to the front end with JavaScript when possible, rather than using Liquid where/map filters on large datasets. Fourth, use paginate tags to limit the data Shopify fetches from the database.
Il numero di sezioni Shopify influisce sulla velocità della pagina?
Sì: ogni sezione aggiunge tempo di rendering Liquid. Una home page con 15 sezioni richiede più tempo per il rendering lato server rispetto a una con 8 sezioni. Tuttavia, l'impatto varia in modo significativo: una semplice sezione di testo potrebbe aggiungere 1-5 ms, mentre una sezione "raccolta in primo piano" che carica 12 prodotti con dati varianti potrebbe aggiungere 50-200 ms. Il conteggio totale delle sezioni conta meno di ciò che fa ciascuna sezione. Concentrati sull'ottimizzazione delle sezioni pesanti (raccolte, griglie di prodotti, contenuti dinamici) piuttosto che ridurre il conteggio totale delle sezioni leggere.
Shopify memorizza nella cache il rendering Liquid?
Shopify uses a CDN edge cache for fully static pages (like blog posts), but most Shopify pages are rendered dynamically — product pages, collection pages, cart pages, and any page with personalized content. This means Liquid code runs on most requests despite the CDN. However, Shopify does cache Liquid fragments internally using a fragment caching system that reuses rendered snippets when the underlying data hasn't changed. You can't control this caching directly, but you can benefit from it by keeping your Liquid code simple and avoiding expensive operations that bypass the cache (like dynamically generated timestamps or random content on each load).
Thunder Page Speed Optimizer può aiutare con le prestazioni di Liquid?
Thunder si concentra sull'ottimizzazione front-end (differimento JavaScript, ottimizzazione CSS, ordine di caricamento delle risorse) piuttosto che sul rendering lato server Liquid. Consideralo come due livelli complementari: l'ottimizzazione liquida riduce il TTFB facendo sì che il server generi HTML più velocemente, mentre Thunder ottimizza ciò che accade dopo l'arrivo dell'HTML, rinviando le risorse di blocco del rendering e migliorando i Core Web Vitals. Per ottenere i migliori risultati, ottimizza entrambi: ripulisci i modelli Liquid per una risposta del server più rapida, quindi utilizza Thunder per ottimizzare la distribuzione front-end.
Liquido più veloce = Primo byte più veloce = Tutto più veloce
L'ottimizzazione dei liquidi è il fondamento della velocità del negozio Shopify. Ogni millisecondo risparmiato nel rendering lato server si traduce direttamente in un TTFB più veloce e un TTFB più veloce significa che tutto a valle (rendering, interattività, carico visivo) inizia prima. Le soluzioni di maggiore impatto sono solitamente le più semplici: limitazione dei cicli di raccolta, assegnazione di valori ripetuti e appiattimento degli snippet nidificati.
Per un quadro completo della velocità, abbina l'ottimizzazione di Liquid ai miglioramenti della consegna front-end. Maniglie Thunder Page Speed Optimizer Differimento JavaScript, Ottimizzazione CSSe caricamento delle risorse: la controparte front-end del tuo lavoro Liquid lato server.
Metti alla prova il tuo negozio adesso per vedere il tuo TTFB attuale e identificare le opportunità di ottimizzazione. Per una strategia di ottimizzazione completa, consulta la nostra guida completa all'ottimizzazione della velocità di Shopify.
Expert Speed Optimization for Your Store
Our team handles everything — theme optimization, app cleanup, Core Web Vitals guarantee. Most stores optimized in 2 weeks.
✅ Core Web Vitals Guarantee · ⚡ 2-Week Delivery · 🎁 6 Months Free Thunder
Starting from €1,500 · Learn more