CSS Critico in PrestaShop: Come Eliminare le Risorse che Bloccano il Rendering
Cos'è il CSS Critico e Perché è Importante per PrestaShop?
Il CSS critico si riferisce al set minimo di regole CSS necessarie per il rendering del contenuto visibile nella parte superiore della pagina web (above the fold). Quando un browser carica il tuo negozio PrestaShop, deve scaricare, analizzare e applicare ogni file CSS prima di poter visualizzare qualsiasi contenuto sullo schermo. Ciò significa che una tipica installazione PrestaShop con un foglio di stile del tema, fogli di stile dei moduli e possibilmente un framework CSS può costringere i visitatori a fissare una pagina vuota per diversi secondi, mentre il browser elabora centinaia di kilobyte di CSS che potrebbero non essere nemmeno rilevanti per ciò che il visitatore vede inizialmente.
Il concetto alla base del CSS critico è semplice: estrarre solo gli stili necessari per la visualizzazione iniziale, incorporarli direttamente nel documento HTML e rinviare tutto il resto. Questo consente al browser di iniziare il rendering della pagina quasi immediatamente, migliorando drasticamente il tempo di caricamento percepito e diverse metriche chiave di performance.
Come il CSS che Blocca il Rendering Penalizza i Core Web Vitals
I Core Web Vitals di Google sono un insieme di metriche che influenzano direttamente il posizionamento nei motori di ricerca. Il CSS che blocca il rendering influisce negativamente su diverse metriche contemporaneamente.
Largest Contentful Paint (LCP) misura il momento in cui il più grande elemento visibile termina il rendering. Poiché il CSS blocca completamente il rendering, ogni millisecondo speso per scaricare e analizzare il CSS si aggiunge direttamente al punteggio LCP. Un negozio PrestaShop che carica 300KB di CSS prima di visualizzare qualsiasi contenuto supererà costantemente la soglia di 2,5 secondi per l'LCP, specialmente sulle connessioni mobili.
First Contentful Paint (FCP) registra il momento in cui il browser esegue il primo rendering di qualsiasi contenuto. Il CSS che blocca il rendering ritarda l'FCP perché il browser non può disegnare un singolo pixel finché tutti i fogli di stile bloccanti non sono stati elaborati. I negozi con numerosi moduli, ognuno dei quali inietta i propri file CSS, spesso registrano tempi FCP superiori a 3-4 secondi su connessioni 3G.
Cumulative Layout Shift (CLS) può essere influenzato indirettamente. Quando il CSS si carica in ritardo o in modo asincrono senza un adeguato CSS critico implementato, gli elementi potrebbero renderizzarsi senza stili e poi spostarsi di posizione una volta applicati gli stili. Questo crea instabilità visiva che frustra gli utenti e aumenta i punteggi CLS.
Interaction to Next Paint (INP) ne risente perché il thread principale è occupato nell'analisi di file CSS di grandi dimensioni anziché rispondere agli input dell'utente. Anche dopo il rendering iniziale, il browser deve ancora elaborare i fogli di stile differiti, e se questo accade durante l'interazione dell'utente, si crea un ritardo percepibile.
Identificare le Risorse che Bloccano il Rendering in PrestaShop
Prima di poter eliminare il CSS che blocca il rendering, è necessario identificare esattamente quali risorse stanno causando problemi. Diversi strumenti possono aiutare in questa analisi.
Google PageSpeed Insights fornisce un audit specifico chiamato "Elimina le risorse che bloccano il rendering" che elenca ogni file CSS e JavaScript che blocca il rendering iniziale. Analizza la homepage e le principali pagine di categoria/prodotto del tuo PrestaShop con questo strumento. Presta attenzione alla colonna dei risparmi stimati, che mostra quanti millisecondi potresti recuperare differendo ogni risorsa.
Chrome DevTools - Scheda Coverage è inestimabile per comprendere l'utilizzo del CSS. Apri DevTools, naviga nella scheda Coverage (Ctrl+Shift+P, quindi digita "coverage") e ricarica la pagina. Questo ti mostra esattamente quanto di ogni file CSS viene effettivamente utilizzato durante il rendering iniziale. In un tipico negozio PrestaShop, scoprirai che il 70-85% del CSS caricato su qualsiasi pagina non viene utilizzato per quella pagina specifica.
WebPageTest offre visualizzazioni filmstrip e waterfall che mostrano chiaramente quando i file CSS vengono richiesti, quando terminano il caricamento e quando avviene il primo rendering. Il divario tra l'arrivo dell'HTML e il primo rendering è in gran parte causato dal CSS che blocca il rendering.
Un tipico negozio PrestaShop 1.7 o 8.x carica le seguenti risorse CSS che bloccano il rendering: il foglio di stile del tema (spesso 200-400KB), un file del framework Bootstrap (150KB+), Font Awesome o font icona (50-100KB) e da 3 a 15 fogli di stile specifici dei moduli. Combinati, questi possono facilmente superare i 500KB di CSS che blocca il rendering.
Estrazione Manuale del CSS Critico
L'estrazione manuale comporta l'identificazione delle regole CSS necessarie per il contenuto above the fold e la loro separazione dal resto. Sebbene laboriosa, questa approccio offre il massimo controllo sul risultato.
Inizia identificando ciò che appare above the fold su ciascun tipo di pagina. Per un negozio PrestaShop, i modelli di pagina principali sono: homepage, elenco delle categorie, pagina prodotto, carrello e checkout. Ognuno ha un contenuto above the fold diverso. La homepage tipicamente mostra l'header, la navigazione e un banner o slider principale. Le pagine di categoria mostrano l'header, i breadcrumb e la prima riga di prodotti. Le pagine prodotto mostrano l'header, l'immagine del prodotto, il titolo e il prezzo.
Utilizza la scheda Coverage di Chrome DevTools per identificare quali regole CSS vengono applicate agli elementi above the fold. Puoi anche utilizzare il pannello "Computed" nella scheda Elements per vedere esattamente quali regole influenzano ogni elemento visibile.
Estrai queste regole in un file separato o in un blocco inline. Un tipico payload di CSS critico per una pagina PrestaShop dovrebbe essere compreso tra 10KB e 30KB (prima della compressione gzip). Se il tuo CSS critico supera i 50KB, probabilmente stai includendo troppe regole. Concentrati rigorosamente su layout (grid, flexbox), tipografia (font-family, font-size, line-height per il testo visibile), colori e sfondi degli elementi visibili, la struttura dell'header e della navigazione e il layout dell'area di contenuto principale.
L'approccio manuale è più adatto per negozi con un design fisso che cambia raramente. Se aggiorni frequentemente il tema o aggiungi moduli, il carico di manutenzione del CSS critico manuale diventa insostenibile.
Strumenti Automatizzati per il CSS Critico
Gli strumenti automatizzati generano CSS critico renderizzando la pagina in un browser headless ed estraendo solo gli stili applicati agli elementi all'interno del viewport. Due strumenti dominano questo settore.
Critters (di Google Chrome Labs)
Critters è un plugin Webpack che incorpora il CSS critico inline al momento della build. A differenza di altri strumenti, Critters non utilizza un browser headless. Invece, analizza staticamente HTML e CSS, identificando quali selettori corrispondono agli elementi presenti nel documento HTML. Questo lo rende più veloce e prevedibile rispetto agli approcci basati su browser.
Per l'integrazione con PrestaShop, Critters funziona bene quando incorporato in una pipeline di build personalizzata. Elabora l'output HTML renderizzato e incorpora gli stili critici inline, convertendo i restanti link ai fogli di stile per il caricamento asincrono. Il vantaggio principale di Critters è la velocità e l'affidabilità durante i processi di build. Poiché non necessita di un'istanza del browser in esecuzione, può elaborare le pagine rapidamente e in modo coerente.
Le considerazioni di configurazione per Critters in PrestaShop includono l'impostazione della larghezza del viewport appropriata (tipicamente 1350px per desktop, 375px per mobile), l'esclusione di certi selettori generati dinamicamente (come le classi specifiche dei moduli aggiunte tramite JavaScript) e la gestione corretta delle dichiarazioni font-face per evitare il flash of invisible text (FOIT).
Critical (di Addy Osmani)
Il pacchetto npm Critical utilizza un browser headless (Puppeteer) per renderizzare le pagine ed estrarre il CSS above the fold. Produce risultati più accurati dell'analisi statica perché vede la pagina esattamente come la vedrebbe un browser reale, inclusi i contenuti renderizzati con JavaScript e gli stili applicati dinamicamente.
Per utilizzare Critical con PrestaShop, dovresti creare un passaggio di build che recupera ogni tipo di pagina dal tuo negozio live o di staging, estrae il CSS critico e lo inietta nei template del tema. Questo approccio richiede un'attenta gestione dell'autenticazione per le pagine protette (checkout, pagine account) e la considerazione di diversi viewport per il CSS critico responsive.
Critical può essere eseguito come passaggio post-distribuzione. Dopo aver distribuito un aggiornamento del tema, rigeneri il CSS critico per ogni tipo di pagina e aggiorni gli stili inline di conseguenza. Questo assicura che il CSS critico rimanga sincronizzato con gli stili effettivi del tema.
Impostazioni CCC di PrestaShop: Combina, Comprimi, Cache
PrestaShop include un'ottimizzazione CSS integrata attraverso la funzionalità CCC (Combina, Comprimi, Cache), accessibile nel Back Office sotto Parametri Avanzati > Prestazioni. Comprendere queste impostazioni è essenziale prima di implementare il CSS critico, poiché interagiscono con la tua strategia di ottimizzazione.
Combina file CSS unisce tutti i file CSS in un unico file combinato. Questo riduce il numero di richieste HTTP, cosa cruciale negli ambienti HTTP/1.1. Con HTTP/2 e HTTP/3, il vantaggio della combinazione è ridotto perché più file possono essere scaricati in parallelo. Tuttavia, la combinazione aiuta ancora con il blocco del rendering perché il browser deve attendere un solo file invece di potenzialmente dozzine.
Comprimi CSS (minificazione) rimuove spazi bianchi, commenti e caratteri non necessari dai file CSS. Questo riduce tipicamente la dimensione dei file CSS del 15-25%. Abilita sempre questa opzione in produzione.
Cache CSS aggiunge un hash univoco ai nomi dei file CSS combinati, abilitando una cache aggressiva del browser garantendo al contempo che i visitatori ottengano gli stili aggiornati dopo le modifiche. Questo funziona sia con il sistema integrato di PrestaShop che con le configurazioni CDN.
Quando implementi il CSS critico insieme al CCC, la configurazione raccomandata è abilitare tutte e tre le opzioni CCC. Il file CSS combinato e minificato diventa il foglio di stile differito (non critico), mentre il CSS critico viene incorporato inline nell'head HTML. Questo ti offre il meglio di entrambi i mondi: rendering immediato dal CSS critico inline e cache efficiente del foglio di stile completo per i caricamenti successivi delle pagine.
Un'avvertenza importante: dopo aver abilitato o modificato le impostazioni CCC, devi svuotare la cache di PrestaShop. Naviga in Parametri Avanzati > Prestazioni e clicca "Svuota la cache" o elimina il contenuto delle directory /var/cache/prod/ e /var/cache/dev/. Anche i template compilati di Smarty in /var/cache/smarty/compile/ dovrebbero essere svuotati.
Implementare il CSS Critico Inline in PrestaShop
L'implementazione effettiva del CSS critico in PrestaShop comporta la modifica del template head del tema per incorporare gli stili critici inline e differire il CSS rimanente.
Nel file _partials/head.tpl del tuo tema (o l'equivalente nel tuo tema), devi aggiungere il CSS critico inline all'interno di un tag style nell'head del documento. Questo sostituisce il normale link al foglio di stile per gli stili above the fold. Il CSS critico dovrebbe essere posizionato immediatamente dopo i meta tag e prima di qualsiasi altra risorsa.
Un approccio pratico è creare un template Smarty che includa il CSS critico inline. Crea un file nel tuo tema in _partials/critical-css.tpl che contenga gli stili critici racchiusi in un elemento style. Poi includi questo parziale nel template head. Questo mantiene il CSS critico gestibile e separato dalla logica del template principale.
Per diversi tipi di pagina, puoi caricare condizionalmente CSS critici diversi. PrestaShop fornisce la variabile $page.page_name in Smarty che indica quale tipo di pagina viene renderizzata. Usala per caricare CSS critici specifici per pagina: un set per la homepage, un altro per le pagine di categoria, un altro per le pagine prodotto e un fallback generico per tutte le altre pagine.
Caricamento Asincrono del CSS Rimanente
Una volta che il CSS critico è incorporato inline, il CSS rimanente deve caricarsi senza bloccare il rendering. Esistono diverse tecniche per questo.
La tecnica dello swap dell'attributo media è l'approccio più ampiamente supportato. Cambia l'attributo media del link al foglio di stile in "print" e aggiungi un handler onload che lo cambia in "all" una volta caricato. Questo indica al browser che il foglio di stile è solo per la stampa, quindi lo scarica con priorità bassa e non blocca il rendering. Una volta caricato, l'handler onload cambia il tipo di media in "all", applicando gli stili allo schermo. Includi un fallback noscript con il link originale per gli utenti senza JavaScript.
L'approccio rel="preload" utilizza il precaricamento dei link per recuperare il foglio di stile con alta priorità ma senza bloccare il rendering. Aggiungi rel="preload" e as="style" all'elemento link, insieme a un handler onload che cambia il rel in "stylesheet". Questo approccio fornisce una migliore priorità di caricamento rispetto alla tecnica di swap del media, ma ha un supporto browser leggermente inferiore nei browser più vecchi.
La libreria loadCSS di Filament Group fornisce una soluzione JavaScript robusta per il caricamento asincrono del CSS con ampio supporto browser. Gestisce casi limite e fallback che le implementazioni manuali potrebbero trascurare. Per i negozi PrestaShop che devono supportare browser più vecchi, questa è la scelta più sicura.
Qualunque tecnica tu scelga, includi sempre un fallback <noscript> contenente il normale link al foglio di stile. Questo assicura che il sito rimanga funzionale per la piccola percentuale di visitatori con JavaScript disabilitato.
Problemi CSS Specifici dei Moduli in PrestaShop
I moduli PrestaShop sono una delle maggiori fonti di CSS che blocca il rendering e presentano sfide uniche per l'ottimizzazione del CSS critico.
Pattern di iniezione CSS dei moduli: La maggior parte dei moduli PrestaShop registra il proprio CSS attraverso l'hookDisplayHeader o tramite il metodo setMedia() del modulo, che chiama $this->context->controller->addCSS(). Questi fogli di stile vengono aggiunti all'head della pagina e bloccano il rendering per impostazione predefinita. Quando CCC è abilitato, PrestaShop combina questi fogli di stile dei moduli con il CSS del tema, il che significa che non possono essere differiti individualmente.
CSS dei moduli non necessario su pagine irrilevanti: Un problema comune è che i moduli caricano il loro CSS su ogni pagina anche quando la funzionalità del modulo viene utilizzata solo su pagine specifiche. Un modulo di pagamento che carica il proprio CSS sulla homepage, o un modulo di confronto prodotti che carica il CSS sulla pagina di checkout, spreca banda e aumenta il tempo di blocco del rendering. Verifica i tuoi moduli e assicurati che ciascuno carichi il CSS solo sulle pagine dove è effettivamente necessario. Molti moduli offrono un'opzione di configurazione per questo. Per quelli che non la offrono, puoi sovrascrivere l'hook header del modulo per aggiungere condizioni sul tipo di pagina.
Qualità del CSS dei moduli di terze parti: I moduli di terze parti spesso includono CSS scarsamente ottimizzato. Potresti trovare moduli che includono file CSS da 50KB+ quando ne necessitano solo 5KB. Alcuni includono interi framework CSS all'interno del modulo. Altri includono CSS di sviluppo non minificato. Identifica questi moduli usando la scheda Coverage di Chrome DevTools e considera la creazione di versioni ottimizzate dei loro fogli di stile nella directory di override dei moduli del tema in /themes/tuo-tema/modules/nome-modulo/views/css/.
Ordine di caricamento del CSS dei moduli: PrestaShop carica il CSS dei moduli nell'ordine in cui i moduli sono registrati per gli hook. Se il CSS di un modulo critico viene caricato per ultimo nel file combinato, il browser deve analizzare tutto il CSS precedente prima di raggiungere gli stili essenziali. Puoi influenzare l'ordine di caricamento attraverso la pagina delle posizioni dei moduli nel Back Office (Design > Posizioni), spostando i moduli essenziali più in alto nell'hook displayHeader.
Misurare il Miglioramento: Prima e Dopo
Misurare l'impatto dell'implementazione del CSS critico richiede una metodologia di test coerente e le metriche giuste.
Strumenti per la misurazione: Usa Google PageSpeed Insights per dati di laboratorio e sul campo, WebPageTest per un'analisi dettagliata del waterfall e Chrome DevTools Lighthouse per audit locali rapidi. Esegui test da più posizioni e velocità di connessione. Le prestazioni mobile su connessioni 3G tipicamente mostrano il miglioramento più drammatico dal CSS critico perché il ritardo del blocco del rendering è proporzionale alla velocità di connessione.
Metriche chiave da monitorare: Il First Contentful Paint è la metrica più direttamente migliorata dal CSS critico, poiché misura il primo evento di rendering. Anche l'LCP dovrebbe migliorare perché il browser può iniziare il rendering e il caricamento delle immagini visibili prima. Il Time to Interactive potrebbe migliorare leggermente perché il thread principale impiega meno tempo nell'analisi iniziale del CSS.
Metodologia di test: Esegui sempre almeno 5 test prima e 5 test dopo l'implementazione, poi confronta le mediane anziché le singole esecuzioni. Le condizioni di rete, il carico del server e la cache CDN possono causare variazioni significative tra le singole esecuzioni dei test. Strumenti come WebPageTest permettono di specificare il numero di esecuzioni e calcolano automaticamente le mediane.
Numeri di Performance nel Mondo Reale
Basandosi su ottimizzazioni reali di negozi PrestaShop, ecco i miglioramenti di performance che puoi tipicamente aspettarti implementando correttamente il CSS critico.
First Contentful Paint: Miglioramento tipico da 1,2 a 2,5 secondi su connessioni mobile 3G. Un negozio che precedentemente aveva un FCP di 4,2 secondi può realisticamente raggiungere 1,8-2,0 secondi con un CSS critico implementato correttamente. Su connessioni desktop a banda larga, il miglioramento è tipicamente di 0,3-0,8 secondi.
Largest Contentful Paint: Un miglioramento di 0,8-2,0 secondi è comune. L'LCP beneficia perché il browser può iniziare a caricare immagini e altri elementi di grandi dimensioni prima, quando il CSS non blocca più il rendering. Un negozio PrestaShop con LCP di 5,1 secondi su mobile può spesso portare questo sotto i 3,0 secondi con il CSS critico combinato con l'ottimizzazione delle immagini.
Punteggio PageSpeed: I punteggi PageSpeed mobile tipicamente aumentano di 15-30 punti dopo l'eliminazione del CSS che blocca il rendering. Un negozio con un punteggio di 35-45 su mobile può realisticamente raggiungere 60-75 con il solo CSS critico. Combinato con altre ottimizzazioni (compressione immagini, differimento JavaScript, caching lato server), punteggi superiori a 85 sono raggiungibili.
Total Blocking Time: Una riduzione di 200-500 millisecondi è tipica, poiché il thread principale impiega meno tempo nell'analisi del CSS durante la fase critica di caricamento.
Questi numeri presuppongono un'installazione PrestaShop ben configurata con un tema moderno, tempi di risposta del server ragionevoli (sotto 500ms TTFB) e una corretta configurazione CDN. I negozi con hosting estremamente lento, un numero eccessivo di moduli o temi pesantemente personalizzati potrebbero vedere risultati diversi.
Checklist di Implementazione
Per riassumere il processo completo per implementare il CSS critico nel tuo negozio PrestaShop, segui questi passaggi nell'ordine indicato. Primo, verifica il panorama CSS attuale usando Chrome DevTools Coverage per capire quanto CSS viene caricato e quanto è effettivamente utilizzato above the fold. Secondo, abilita le impostazioni CCC di PrestaShop (Combina, Comprimi, Cache) come ottimizzazione di base. Terzo, scegli il metodo di generazione del CSS critico: estrazione manuale per temi semplici e stabili, oppure strumenti automatizzati come Critters o Critical per negozi complessi o frequentemente aggiornati. Quarto, genera il CSS critico per ogni tipo di pagina principale: homepage, categoria, prodotto, carrello e checkout. Quinto, implementa il CSS critico inline nel template head del tema con caricamento condizionale per tipo di pagina. Sesto, configura il caricamento asincrono per il file CSS combinato rimanente usando la tecnica di swap del media o preload. Settimo, verifica il CSS dei moduli per eliminare il caricamento di fogli di stile non necessari su pagine irrilevanti. Ottavo, misura i risultati usando PageSpeed Insights, WebPageTest e Lighthouse, confrontando le metriche prima e dopo. Nono, imposta un processo per rigenerare il CSS critico dopo aggiornamenti del tema o modifiche significative ai moduli. Infine, monitora i Core Web Vitals in Google Search Console per verificare i miglioramenti nel mondo reale per i visitatori effettivi nel tempo.
L'ottimizzazione del CSS critico è uno dei miglioramenti di performance con il maggiore impatto che puoi apportare a un negozio PrestaShop. Sebbene l'implementazione iniziale richieda impegno, il miglioramento risultante nei Core Web Vitals, nell'esperienza utente e nel posizionamento nei motori di ricerca rende l'investimento assolutamente vantaggioso.
Questa risposta ti è stata utile?
Hai ancora domande?
Can't find what you're looking for? Send us your question and we'll get back to you quickly.